【问题标题】:jQuery.post not always sending form datajQuery.post 并不总是发送表单数据
【发布时间】:2014-02-20 14:09:28
【问题描述】:

我用的是jQuery Post函数,例如:

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

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

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

有没有在不发送 jQuery Post 中指定的表单参数的情况下可以触发 POST 请求的情况?


我希望看到:

foo=true&bar=1&baz=baz

但是根本没有表单参数:


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

【问题讨论】:

  • 标头是否有表单并且值是否为空,或者它甚至不在请求中..?
  • @Drewness 甚至不在请求中!标头根本没有表单参数。
  • @ADAD.TJ 这不是服务器端问题。我正在查看存储在服务器上的请求日志,并且没有表单参数。这个问题也是间歇性的。
  • 当您说问题是“间歇性的”时,您的意思是它有时有效,有时无效?这有什么规律吗?可能是不同的客户端浏览器,还是什么?
  • 这可能是某种破坏)您的每个用户都可以向您发送不同的查询,甚至可以编辑您的 js 代码。您应该尝试自己重复此行为

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


【解决方案1】:

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

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

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

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

那么发布的表单参数将是:

bar=1&baz=baz

现在这并不能解决我的实际问题(据我所知,正确的条件已经到位,只有在所有变量都有值时才进行调用),但它确实回答了我的问题。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      不要使用$.post 速记,而是尝试使用$.ajax;不确定这是否会解决它,但尝试一下肯定不会有什么坏处。

      另外,您不必担心函数调用。微优化 ftw!

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

      【讨论】:

        【解决方案4】:

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

        但是试试$.ajax。如果您需要对 ajax 请求进行更深入的配置,通常最好使用它。它应该工作

        例如

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-12-10
          • 1970-01-01
          • 1970-01-01
          • 2015-12-17
          • 2013-08-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多