jQuery.post并不总是发送表单数据

时间:2014-02-20 14:09:28

标签: javascript jquery post http-post jquery-post

我正在使用jQuery Post函数,例如:

var fooVar = true;
var barVar = 1;
var bazVar = "baz";

$.post("url",
   {
        foo: fooVar,
        bar: barVar,
        baz: bazVar
   },
   function(){
     alert("success");
   }
);

在我的日志中,我看到一个间歇性问题,其中"url"的请求是在没有任何表单参数的情况下发出的,而我只有一个函数可以调用它。

是否有可能触发POST请求的情况,而不发送jQuery Post中指定的表单参数?


我希望看到:

  

富=真安培;巴= 1&安培;巴兹=巴兹

但是根本没有表格参数:

  


更新:通过查看统计数据,这个问题似乎主要在Internet Explorer浏览器(IE7-IE11)上,但它并不是IE独有的(Chrome,Firefox)也有问题)。

4 个答案:

答案 0 :(得分:2)

当参数值为undefined时,jQuery Post可以发送没有表单参数的请求。

例如,如果我们有以下内容:

var fooVar = undefined;
var barVar = 1;
var bazVar = "baz";

$.post("url",
   {
        foo: fooVar,
        bar: barVar,
        baz: bazVar
   },
   function(){
     alert("success");
   }
);

然后发布的表单参数将是:

  

巴= 1&安培;巴兹=巴兹

现在这并没有解决我的实际问题(从我能说的正确条件已经到位,只有在所有变量都有值的情况下才能调用),但它确实回答了我的问题。

答案 1 :(得分:2)

听起来像浏览器版本特定的问题,尝试使用不同版本的IE在本地重现它。它可能是代码中的一个拼写错误,由某些版本的IE优雅地处理而不是其他版本(如数组中的尾随逗号) - 在JavaScript代码上运行JSLint / JSHint。我能想到的另一种情况是CORS预检OPTIONS请求 - 它没有正文。您确定没有执行CORS请求吗?您的Ajax URL是否与原点匹配?

答案 2 :(得分:1)

不要使用$.post简写,而是尝试使用$.ajax;不确定这是否会解决它,但尝试它肯定不会有害。

另外,你可以少担心一个功能调用。微观优化ftw!

$.ajax({
  type: "POST",
  url: "url",
  data: { foo: bar }
});

答案 3 :(得分:0)

$.post是使用$.ajax进行POST请求的简便方法,因此使用这两者之间没有太大区别。也许问题出在代码中的其他地方,而不是在jquery或浏览器中。

但请尝试$.ajax。如果您需要比ajax请求更深入的配置,通常更好。它应该工作

e.g。

$.ajax({
  type: "POST",
  url: "test_url",
  data: { name: "John", location: "Boston" },
  success: function(response) {
     alert('success !');
  }
});

这里有更多https://api.jquery.com/jQuery.ajax/