JQueryAjax 发送的是 GET 而不是 POST

下面的代码触发 GET 而不是 POSTHTTP 请求。

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?


我在谷歌浏览器检查和火狐检查中看到浏览器发送了一个 GET:

请求网址: http://localhost/sample-codes/update%20mysql/api/add/ 请求方法: GET 状态代码: 200 OK


解决了

网址是’。/api/add’实际上是发送到’。/api/add/index.php’。事实证明。/api/add/index.php’或’。/api/add/’给我一个 POST 请求。

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

76433 次浏览

For me, your piece of code look OK, but if you want to be sure, you can use $.post instead of $.ajax

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

jquery link : http://api.jquery.com/jQuery.post/

Check out your .htaccess file or search for some other thing that may redirect your request

Some problem on MVC. For some reason when I remove the [HttPost] it works as expected, even though I am telling ajax to use POST .

  • It turns out you need to use

type: "POST"

  • Even though the example on jQuery page says to use

method : "POST"

Now it POST's

But after digging in the documentation I found this.

enter image description here

I noticed this behavior as well where my POST was sending a GET. The scenario's pretty unique, but maybe it will help someone.

This was happening to me on my User Role-edit page, where I was using ajax (post) as an immediate action when a role was checked or unchecked.

I also had the server configured to re-authenticate the user (and redirect them) whenever their role information changed so that their claims would be refreshed.

The brutal cycle ended up as:

  1. First Role Update -- POST -- 200 success

  2. Next Role Update -- POST -- 302 Found -> Redirect (I did not notice this until I used Fiddler rather than Chrome's network monitor)

  3. Redirect Call from (2) (Same URL) -- GET -- 404 Not Found (since I only allowed Post)

  4. GOTO (1)

I ended up changing the server to bypass re-authentication/claims update when it detected an ajax request (based on the Accept Types).

I had a similar issue and it started working for me as soon as I removed the hardcoded https:// from my url.

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"
});

I had this issue and per @FAngle's suggestion it was because my .htaccess was removing trailing slashes — and I had set the url to /ajax/foo/bar/ and not/ajax/foo/bar. The redirect changes the request from POST to GET. Remove the / and problem solved!

I had the same problem and found this question but answers didn't solve my problem. I eventually solve it by removing contentType field in ajax request.

contentType: "application/json",

I had this issue, and it turned out to be a URL Rewrite module in IIS.

I'm using ASP.NET MVC and WebAPI. I created rule to force lowercase URLs so social networks don't view the same URL as two different pages.

For example:

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

vs

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

This however, was somehow messing with my ajax requests. I disabled the rule and the problem was resolved.

The URL './api/add' actually got redirected to './api/add/index.php'. therefore this bizarre side-affect which the new request after the redirect sent using GET instead of POST

Solution

  • use the full url './api/add/index.php'
  • or add a slash './api/add/' .

I found that when using dataType: 'jsonp' it converts the request to a GET. I changed it to dataType: 'json' it changed from GET to POST.

a very common mistake is that we are using button type as submit and not changing the method for form (which is get by default)

make sure you don't use button type submit and if you do you have changed the form method to post

I came across this issue and the problem seemed to be with encoding of the url parameters taken from inputs. Chrome's dev tools where still showing a POST request, but the values were being received as a GET request.

The code giving problems was:

$.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");
}
});

And the fix was to move the to use the data parameter instead of putting the values into the 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");
}
});

In my case, it turns out that the problem wasn't in the AJAX request.

I had attached submit into the type attribute of my input button, so, when the form was submitted, it was by default a GET request to the / path.

Eventually, I replaced the type attribute by button and it worked.

$.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>