我正在使用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)也有问题)。
答案 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 !');
}
});