以下代码触发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 /'。
答案 0 :(得分:88)
MVC上的一些问题。出于某种原因,当我删除[HttPost]时,它按预期工作,即使我告诉ajax使用POST。
键入:" POST"
方法:" POST"
现在发布了
但是在挖掘文档后我发现了这一点。
答案 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)作为选中或取消选中角色时的立即操作。
我还让服务器配置为每当他们的角色信息发生变化时重新验证用户(并重定向他们),以便刷新他们的声明。
残酷的循环结束了:
第一个角色更新 - POST - 200成功
下一个角色更新 - POST - 302 Found - >重定向(我没有 请注意这一点,直到我使用Fiddler而不是Chrome的网络 监视器)
重定向来自(2)的调用(相同的URL) - GET - 404 Not Found(因为 我只允许Post)
GOTO(1)
我最终在检测到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");
}
});