【问题标题】:JQuery Ajax is sending GET instead of POSTJQuery Ajax 发送的是 GET 而不是 POST
【发布时间】:2012-08-30 11:29:21
【问题描述】:

以下代码触发 GET 而不是 POST HTTP 请求。

function AddToDatabase() {
  this.url = './api/add';
}

AddToDatabase.prototype.postData = function(dataToPost) {
$.ajax({
    type: "POST",
    url: this.url,
    data: dataToPost,
    context: this,
    success: this.onSuccess
  });
};


var AddToDatabase = new AddToDatabase();
data = {data: 'coucou'};
AddToDatabase.postData(data);

为什么,以及如何获得 POST ?


我在 Google Chrome Inspect 和 Firefox Inspect 中看到浏览器发送 GET。这是来自 Chrome:

请求网址:http://localhost/SAMPLE-CODES/UPDATE%20MYSQL/api/add/ 请求方式:GET 状态码:200 OK


已解决

名为“./api/add”的 URL 实际上是发布到“./api/add/index.php”的。原来调用 './api/add/index.php' 或 './api/add/' 给了我一个 POST 请求。

这只是一个错误的 URL,但由于某种原因,我收到了对 '.api/add/' 的成功 GET 请求。

【问题讨论】:

  • 为什么会是 GET 请求?
  • 您是否尝试在 firefox 上运行 ajax 调用并在 firebug 上打开网络面板?
  • Test - 如果你运行它并检查网络面板,你会发现它发送了一个 post 请求
  • @tucson - 正如我已经写过的那样 - 检查您的 .htaccess 文件。可能它会重定向而不是重写。基本上,我看到 JS 没问题(预计 url './api/add' 中的那个点让我感到困惑)。所以它看起来更像是服务器端问题。而您问题中的信息不足以提供具体帮助
  • 请添加解决方案作为答案

标签: jquery ajax


【解决方案1】:

MVC 上的一些问题。出于某种原因,当我删除 [HttPost] 时,它按预期工作,即使我告诉 ajax 使用 POST 。

  • 原来你需要使用

类型:“POST”

  • 尽管 jQuery 页面上的示例说要使用

方法:“POST”

现在是 POST 的

但是在挖掘文档后我发现了这个。

【讨论】:

  • 这是我刚刚遇到的问题。没有意识到选项名称在 1.9 时已更改。一直以为是“方法”
  • 我认为将两者都包含在内是没有问题的。 { method : "POST", type: "POST" }
  • 是的,你可以在构造函数中包含任何你想要的东西,但是为了兼容性而同时包含这两者并没有什么意义。大多数人现在会以任何方式使用 1.11 或 2.1。从 1.4.3 或 1.6.2 升级后,这只会导致问题
  • 周五我花了很长时间试图解决这个问题,更新旧的前端以使用全新的 API。非常感谢!
【解决方案2】:

我遇到了这个问题,根据 @FAngle 的建议,这是因为我的 .htaccess 正在删除尾部斜杠 - 我已将 url 设置为 /ajax/foo/bar/ 而不是/ajax/foo/bar。重定向将请求从 POST 更改为 GET。去掉 / 问题就解决了!

【讨论】:

  • 这为我解决了原始问题中提到的确切问题。我在 Wamp 3.0.6 上托管一个 laravel 应用程序
  • 这救了我的命。将近 4 小时的调试。
  • 解决了这个问题。
【解决方案3】:

URL './api/add' 实际上被重定向到'./api/add/index.php'。因此这个奇怪的副作用是重定向后的新请求使用GET而不是POST发送的

解决方案

  • 使用完整网址'./api/add/index.php'
  • 或添加斜线'./api/add/'

【讨论】:

    【解决方案4】:

    我在 POST 发送 GET 时也注意到了这种行为。这个场景非常独特,但也许它会对某人有所帮助。

    这发生在我的用户角色编辑页面上,当角色被选中或取消选中时,我使用 ajax(发布)作为即时操作。

    我还将服务器配置为在用户的角色信息发生更改时重新验证用户(并重定向他们),以便刷新他们的声明。

    残酷的循环结束了:

    1. 第一次角色更新 -- POST -- 200 成功

    2. 下一个角色更新 -- POST -- 找到 302 -> 重定向 (我没有 请注意这一点,直到我使用 Fiddler 而不是 Chrome 的网络 监视器)

    3. 从 (2) 重定向调用(相同的 URL)-- GET -- 404 未找到(因为 我只允许发帖)

    4. 转到 (1)

    当它检测到 ajax 请求(基于接受类型)时,我最终将服务器更改为绕过重新身份验证/声明更新。

    【讨论】:

    • 哇!面临类似的事情。显然,在我的控制器级别,它期待一个我没有包含在新控制器端点中的会话参数,它正在执行 302,然后是 GET。谢谢老兄。
    【解决方案5】:

    我发现当使用dataType: 'jsonp' 时,它会将请求转换为GET。我把它改成了dataType: 'json',它从GET改成了POST

    【讨论】:

    • 您是观察到这种行为的原因吗?
    • @SaurabhSarathe — JSONP 通过生成只能生成 GET 请求的脚本元素来工作。
    【解决方案6】:

    我遇到了类似的问题,当我从我的网址中删除硬编码的https:// 后,它就开始为我工作了。

    jQuery.ajax({
     type: "POST",
     url: "www.someurl.com",//instead of "https://www.someurl.com"
     data: { foo:"bar"},
     success: function(d){ console.log(d); },
     dataType: "JSONP"
    });
    

    【讨论】:

    • 这听起来更像是 HTTP 和 HTTPS 之间的问题(即您的 www.someurl.com 没有有效证书)
    【解决方案7】:

    对我来说,你的代码看起来不错,但如果你想确定,你可以使用 $.post 而不是 $.ajax

    $.post('ajax/test.html', function(data) {
     $('.result').html(data);
    });
    

    jquery 链接:http://api.jquery.com/jQuery.post/

    【讨论】:

    • post 只是 $.ajax({type:'POST'}) 的简写方法
    • 是的,但是您的代码看起来不错。当我测试它时,它会发出一些帖子请求
    【解决方案8】:

    我遇到了同样的问题并找到了这个问题,但答案并没有解决我的问题。我最终通过删除 ajax 请求中的 contentType 字段来解决它。

    contentType: "application/json",
    

    【讨论】:

      【解决方案9】:

      查看您的 .htaccess 文件或搜索可能重定向您的请求的其他内容

      【讨论】:

        【解决方案10】:

        我遇到了这个问题,结果证明是 IIS 中的 URL 重写模块。

        我正在使用 ASP.NET MVC 和 WebAPI。我创建了强制小写 URL 的规则,因此社交网络不会将相同的 URL 视为两个不同的页面。

        例如:

        http://url.com/View/Something/123GuidIdSomething

        对比

        http://url.com/view/something/123guididsomething

        然而,这在某种程度上弄乱了我的 ajax 请求。我禁用了规则,问题就解决了。

        【讨论】:

          【解决方案11】:

          一个很常见的错误是我们使用按钮类型作为提交而不改变表单的方法(默认是get)

          确保你不使用按钮类型提交,如果你这样做了,你已经将表单方法更改为发布

          【讨论】:

            【解决方案12】:

            我遇到了这个问题,问题似乎与从输入中获取的 url 参数的编码有关。 Chrome 的开发工具仍然显示 POST 请求,但值是作为 GET 请求接收的。

            给出问题的代码是:

            $.ajax({
                method: 'POST',
                type: 'POST',
                url: '/ajax/test.php?firstname=' + $('#fname').val()+ "&lastname=" + $('#lname').val()+ "&email=" + $('#email').val(),
                success: function(msg) {
            
                    alert("Success");          
                },
                error: function() {
            
                    alert("Failure");
                }
            });
            

            解决方法是移动 以使用 data 参数,而不是将值放入 url:

            $.ajax({
                method: 'POST',
                type: 'POST',
                url: '/ajax/test.php',
                data: {firstname: $('#fname').val(), lastname: 
                $('#lname').val(), email: $('#email').val()},
                success: function(msg) {
            
                    alert("Success");
                                        
                },
                error: function() {
                    alert("Failure");
                }
             });
            

            【讨论】:

              【解决方案13】:

              在我的例子中,问题不在于 AJAX 请求。

              我已将submit 附加到我的input 按钮的type 属性中,因此,提交表单时,默认情况下它是对/ 路径的GET 请求。

              最后,我用button 替换了type 属性并且它起作用了。

              $.ajax({
                        url: "login.php",
                        type: "POST",
                        data: $("#form").serialize(),
                        success: (param) => {},
                        error: (param) => {} 
               })
              <form id="form">
                  <label for="foo">Foo</label>
                  <input type="text" name="foo" id="foo">
                  <br>
                  <label for="password">Password</label>
                  <input type="password" name="password" id="password">
                  <br>
                  <input <!--type="submit"--> type="button" value="Send" id="submit">
              </form>

              【讨论】:

                猜你喜欢
                • 2012-03-09
                • 1970-01-01
                • 2021-06-20
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-10-20
                • 2015-06-02
                相关资源
                最近更新 更多