【问题标题】:Why is jQuery performing an Ajax GET when I ask it to POST当我要求它发布时,为什么 jQuery 会执行 Ajax GET
【发布时间】:2014-04-08 23:22:52
【问题描述】:

鉴于这个非常简单的 HTML 代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script src="Scripts/jquery-1.10.2.js"></script>
    </head>
    <body>
        <script>
            $.ajax({
                url: "/MyURL/",
                data: "TEST",
                type: "POST"
            });
        </script>
    </body>
</html>

我在 Fiddler 观察的情况下加载此页面。

观察到 HTTP 请求是 GET 而不是请求的 POST。为什么?

【问题讨论】:

  • 我认为你的 $.Ajax 写错了
  • #Rory Becker 我尝试了上面的代码,但是看看我发布的答案是不正确的,我试过了,这是正确的
  • @Kermani 您的更改似乎是发送 JSON 而不是文字字符串。在这两种情况下,结果都是 GET 而不是请求的 POST。
  • @Rory Becker,有一种测试方法:使用其他库或使用 xmlhttprequest 编写自己的 Ajax 代码,然后再次查看 Fiddler。我认为问题不在于 Jquery

标签: jquery http http-post http-get


【解决方案1】:

编辑:这是本地自定义版本的 jQuery 1.10.2 造成的错觉


jQuery 1.10.2 似乎遇到了这个问题,但它在 jQuery 1.11.0 中是“固定的”(假设它首先是一个错误)。

如果运气好的话,这将防止其他人扯掉他们的头发:)

【讨论】:

  • 关于这个错误的任何参考?不管怎样,谢谢分享!
  • 我无法复制它
  • 我将推迟接受我自己的答案,直到我得到其他人的确认。 :)
  • @A.Wolff 你是说你没有在 Fiddler 中观察到 GET 吗?或者您是说数据似乎可以通过您的后端系统?当预期为 POST 时,许多框架似乎能够处理通过 GET 传入的数据。然而,在我的真实案例中,我需要一个 POST,因为我们的有效负载数据超过了 URL 限制。
  • 快速检查 jquery 源,我看不出关于 jq 1.10.2 和 jq 1.11.0 的 ajax 实现之间有任何区别编辑:有 4 个重命名变量,这就是我能看到的所有内容,无论如何都不相关你的问题
【解决方案2】:

试试这个

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script src="Scripts/jquery-1.10.2.js"></script>
    </head>
    <body>
        <script>
        var variable="TEST";
            $.ajax({
                url: "test.php",
                data: ({test:variable}),
                type: "post"
            });
        </script>
    </body>
</html>

【讨论】:

  • 我运行您完全复制的代码,Fiddler 说它生成的是 GET 而不是 POST。 :(
  • 亲爱的@Rory Becker,我只是不知道 Fiddler 是什么,但我认为 服务器端语言 将获得 post 很重要 变量或 Get 变量。例如,当您使用 php 进行测试时,您将有一个像这样的变量 $_POST['test']
  • GET 和 POST 之间有很多不同之处。在我的实际案例中,关键是所有以 GET 形式发送的数据都放在 URL 中,该 URL 对可能传递的数据量有更严格的限制。 POST 能够携带比 GET 多很多倍的数据。这就是我们需要 POST 的原因。 AFIACT 这完全是客户端问题。
【解决方案3】:

因此,您的 jQuery 1.10.2 本地副本以某种方式进行了修改,可能会覆盖全局 ajax 选项以使用 GET 方法发出所有 ajax 请求。然后,您应该更新您的 jq 本地副本或使用任何 CDN。 ;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 2017-12-17
    • 2019-08-10
    • 1970-01-01
    • 2013-03-08
    • 2016-03-31
    • 1970-01-01
    相关资源
    最近更新 更多