如何在jquery ajax请求的data参数中表示json数组?

How do I represent a json array within the data parameter in a jquery ajax request?

本文关键字:参数 表示 json 数组 data jquery ajax 请求      更新时间:2023-09-26

我试图通过ajax发布一些数据到我们的后端API,但是json数据中的数组被jquery变成了奇怪的东西…例如,后端(python)将jquery ajax数据视为两个列表的字典

{'subject': ['something'], 'members[]': ['joe','bob']} 

而不是

{'subject':'something','members':['joe','bob']}

从react组件中提取的HTML表单:

  <div class="the_form">
    <form onSubmit={this.handleSubmit}>
      <input type="textarea" ref="members" placeholder="spongebob, patrick" />
      <input type="submit" value="Add Thread" />
    </form>
  </div>
jquery ajax代码:
$.ajax({
        beforeSend: function(xhr, settings) {
            // csrf validation
        },
        url: this.props.url,
        dataType: 'json',
        type: 'POST',
        data: {subject: "something", members: ["joe","bob"]},
        success: function(data) {
          this.setState({data: data});
        }.bind(this),
        error: function(xhr, status, err) {
          console.log(this.props.url, status, err.toString());
        }.bind(this)
});

但是,我能够使用httpie(简单的http命令行客户端)适当地发出这样的请求:

echo '{"subject":"something", "members":["joe","bob"]}' | http  --auth test:test POST localhost:8000/api/some_page/ --verbose

我在javascript请求中可能做错了什么,以至于输入进入服务器的方式与预期不同?

在调用ajax函数之前尝试将对象字符串化

JSON.stringify({subject: "something", members: ["joe","bob"]})

试试这个

data: {subject: "something", members: ["joe","bob"]},

然后在后台

request.POST.getlist('members[]')

如果你想使用application/json作为contentType .那么试试这个

data: JSON.stringify({subject: "something", members: ["joe","bob"]}),
contentType: 'application/json; charset=utf-8',
在后台

,

json.loads(request.body)['members']