【问题标题】:Sending a JSON POST request via AJAX [duplicate]通过 AJAX 发送 JSON POST 请求 [重复]
【发布时间】:2014-02-28 12:12:22
【问题描述】:

我正在使用POST向服务器提交数据,控制台出现这个错误:

POST localhost/myProject/webapp/setAccount 400(必需的字符串参数“accountID”不存在)

用户将从组合框中选择一个帐户 ID,这就是应该在帖子中传递的内容。

这是我的代码:

accountSelected: function () {

 var accountSelected = $("#accountcombobox").val();
 console.log("Selected Account: " + accountSelected);
     var myUrl = "webapp/setAccount";

     $.ajax({
         url: myUrl,
         type: "POST",
         data: accountSelected,
         dataType: "json",
         contentType: "application/json"
            })
         .done(function (data) {
         console.log("Response " + JSON.stringify(data));
         })
        }

第一个 console.log 按预期显示所选的帐户 ID,因此我知道该值是正确的。我想将此值传递给 POST 请求,这是我认为我正在做的,但似乎无法让它工作。

编辑

感谢您的回复,但似乎没有一个答案对我有用,仍然是同样的错误。

我也在用Marionette and Backbone,这个会影响吗?

【问题讨论】:

  • 缺少分号并且已经获得值有 json 然后不需要字符串化它
  • 第一个console.log实际输出了什么?你能把你的代码放在 JSFiddle 上吗?

标签: jquery ajax json post backbone.js


【解决方案1】:

试试这个,

data:{ accountSelected: accountSelected},

与,

console.log("Response " + data); //removed JSON.stringify

在 webapp/setAccount 中,

 echo  $_POST['accountSelected'];

【讨论】:

  • 这些都不适合我 - 同样的错误,我也在使用 Backbone.js 和 Marionette,这可能会影响它吗?
【解决方案2】:
accountSelected: function () {

 var accountSelected = $("#accountcombobox").val();
 console.log("Selected Account: " + accountSelected);
     var myUrl = "webapp/setAccount";

     $.ajax({
         url: myUrl,
         type: "POST",
         data: "accountID="+accountSelected,
         dataType: "json",
         contentType: "application/json",
         success: function(result) {
             console.log("Response " + JSON.stringify(result));
          },
      error : function(request, textStatus, errorThrown) {
        alert('textStatus ' + textStatus);
        alert('errorThrown ' + errorThrown);
       }

          });
        }

【讨论】:

  • "accountID="+accountSelected, 是(或者如果您应用了适当的转义,将会是)URL 编码数据。它与contentType: "application/json", 不匹配。
  • @Quentin 您评论了一些不正确的答案。请问可以提供正确答案吗?因为这对我来说也不行:(
  • @BogdanMart — 你看到顶部的大黄色“这个问题已经有了答案”框了吗?点击链接。
【解决方案3】:

你的数据应该是 key: value 的形式,所以:

编辑:改为成功


$.ajax({
         url: myUrl,
         type: "POST",
         data:{
             accountID: accountSelected
         },
         dataType: "json",
         contentType: "application/json",
         success: function(data)
         {
                console.log("Response " +data.accountSelected);
         }
});

【讨论】:

  • 谢谢,但仍然得到完全相同的错误,我还能尝试什么?
  • 在我的编辑中尝试代码(删除 .done 位),看看会发生什么
  • 我担心同样的错误 - 我正在使用 Backbone 和 Marionette - 这会导致问题吗?如果我更改: data:{accountID:"Full"} 我不再收到错误 - 但显然它需要链接到组合框
  • 没有。 contentType: "application/json" data 需要是 JSON 字符串,而不是对象。
【解决方案4】:

不需要使用 JSON.stringify 因为你已经提到了 dataType:'json' 所以试试这个

$.ajax({
     url: myUrl,
     type: "POST",
     data: { accountSelected: accountSelected},
     dataType: "json",
     contentType: "application/json"
        })
     .done(function (data) {
     console.log("Response " +data.accountSelected);
     });

【讨论】:

  • 这是不正确的,JQuery 文档指出 'dataType' 是服务器的预期返回类型。
猜你喜欢
  • 2019-10-15
  • 2016-09-05
  • 1970-01-01
  • 2014-07-28
  • 2015-10-09
  • 1970-01-01
  • 2014-01-30
  • 2016-01-21
  • 2021-01-05
相关资源
最近更新 更多