JQuery Ajax发送GET而不是POST

时间:2012-08-30 11:29:21

标签: jquery ajax

以下代码触发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”的网址实际上是发布到“./api/add/index.php”。事实证明,调用'./api/add /index.php'或'./api/add{ {1}}'会给我一个POST请求。

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

12 个答案:

答案 0 :(得分:88)

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

  • 事实证明你需要使用
  

键入:" POST"

  • 即使jQuery页面上的示例说使用
  

方法:" POST"

现在发布了

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

enter image description here

答案 1 :(得分:24)

我有这个问题,根据@ FAngle的建议,这是因为我的.htaccess正在删除尾随斜杠 - 我已将网址设置为/ajax/foo/bar/而不是/ajax/foo/bar。重定向将请求从POST更改为GET。删除/并解决问题!

答案 2 :(得分:9)

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

解决方案

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

答案 3 :(得分:5)

我注意到这个行为也是我的POST发送GET的地方。这个场景非常独特,但也许会帮助别人。

在我的用户角色编辑页面上发生了这种情况,我在使用ajax(post)作为选中或取消选中角色时的立即操作。

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

残酷的循环结束了:

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

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

  3. 重定向来自(2)的调用(相同的URL) - GET - 404 Not Found(因为 我只允许Post)

  4. GOTO(1)

  5. 我最终在检测到ajax请求时(基于接受类型)更改服务器以绕过重新身份验证/声明更新。

答案 4 :(得分:3)

我发现在使用dataType: 'jsonp'时,它会将请求转换为GET。我将其更改为dataType: 'json',但已从GET更改为POST

答案 5 :(得分:2)

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

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

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

答案 6 :(得分:2)

我有一个类似的问题,一旦我从网址中删除了硬编码的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"
});

答案 7 :(得分:2)

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

contentType: "application/json",

答案 8 :(得分:1)

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

答案 9 :(得分:1)

我遇到了这个问题,结果发现它是IIS中的URL Rewrite模块。

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

例如:

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

vs

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

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

答案 10 :(得分:0)

一个非常常见的错误是我们使用按钮类型作为提交,而不更改表单的方法(默认情况下为获取)

确保您不使用按钮类型“提交”,并且如果您已将表单方法更改为“发帖”

答案 11 :(得分:0)

我遇到了这个问题,问题似乎与从输入中获取的 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");
    }
 });