JQuery Ajax发送GET而不是POST

以下代码触发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中看到检查浏览器发送GET。 这是从Chrome浏览器:

请求URL: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请求。

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

  • 事实certificate,你需要使用

键入:“POST”

  • 即使jQuery页面上的例子说要使用

方法:“POST”

现在它是POST的

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

在这里输入图像说明

我有这个问题,并根据@ FAngle的build议,这是因为我的.htaccess删除尾部斜线 – 我已经设置的url/ajax/foo/bar/而不是/ajax/foo/bar 。 redirect将请求从POST更改为GET。 删除/和解决的问题!

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

  • 使用完整的url'./api/add/index.php'
  • 或者添加一个斜杠'./api/add/'

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

这发生在我的用户angular色编辑页面上,我在这里使用ajax(post)作为angular色被选中或取消选中时的直接操作。

我还configuration了服务器来重新validation用户(并redirect他们),只要他们的angular色信息发生变化,以便他们的索赔将被刷新。

这个残酷的周期结束于:

  1. 第一个angular色更新 – POST – 200成功

  2. 下一个angular色更新 – POST – 302find – >redirect(我没有注意到,直到我用小提琴手而不是铬的networking监视器)

  3. 从(2)redirect调用(相同的URL) – GET – 404没有find(因为我只允许发布)

  4. GOTO(1)

我最终更改服务器以绕过重新authentication/声明更新,当它检测到ajax请求(基于接受types)。

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

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

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

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

 contentType: "application/json", 

看看你的.htaccess文件或search一些可能redirect你的请求的东西

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

我有这个问题,原来是IIS中的URL重写模块。

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

例如:

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

VS

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

然而,这是不知为什么我的阿贾克斯请求搞乱。 我禁用了规则,问题解决了。