JQuery Ajax가 POST 대신 GET을 보내고 있습니다.


87

다음 코드는 POST HTTP 요청 대신 GET을 트리거합니다.

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에서 가져온 것입니다.

요청 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 요청을 받았습니다.


2
GET 요청이 될 것이라고 생각하는 이유는 무엇입니까?
Viktor S.

1
파이어 폭스에서 net 패널이 열린 상태에서 파이어 폭스에서 ajax 호출을 실행하려고 했습니까?
Fabrizio Calderan 2012 년

2
테스트 -이것을 실행하고 네트워크 패널을 확인하면 게시 요청을 보내는 것을 알 수 있습니다
Viktor S.

1
@tucson-이미 썼 듯이-.htaccess 파일을 확인하십시오. 아마도 재 작성 대신 리디렉션을 수행합니다. 기본적으로 JS가 괜찮다는 것을 알 수 있습니다 (URL './api/add'에있는 점이 나를 혼란스럽게합니다). 따라서 서버 측 문제처럼 보입니다. 그리고 당신의 문제의 정보는 특정 도움을 제공하는 것만으로는 충분하지 않습니다
빅토르 S.

1
답하십시오으로 솔루션을 추가
아담 린치

답변:


101

MVC에 문제가 있습니다. 어떤 이유로 [HttPost]를 제거하면 ajax에게 POST를 사용하도록 지시하더라도 예상대로 작동합니다.

  • 당신이 사용해야한다는 것이 밝혀졌습니다.

유형 : "POST"

  • jQuery 페이지의 예에서

방법 : "POST"

이제 POST입니다.

그러나 문서를 파헤친 후 이것을 발견했습니다.

여기에 이미지 설명 입력


6
이것은 내가 방금 가지고 있었던 문제입니다. 옵션 이름이 1.9에서 변경되었음을 알지 못했습니다. 항상이었다 "방법"생각
빌 수비대

2
확실히하기 위해 둘 다 포함하는 데 아무런 문제가 없다고 생각합니다. { method : "POST", type: "POST" }
Scott

네, 생성자에 원하는 것은 무엇이든 포함 할 수 있지만 호환성을 위해이 두 가지를 모두 포함하는 것은 의미가 없습니다. 대부분의 사람들은 이제 어떤 식 으로든 1.11 또는 2.1을 사용할 것입니다. 이로 인해 1.4.3 또는 1.6.2에서 업그레이드 한 후 문제가 발생합니다
Piotr Kula

3
금요일에 새로운 API를 사용하기 위해 이전 프런트 엔드를 업데이트하는 데 너무 오랜 시간을 보냈습니다. 정말 고맙습니다!
NobleUplift

31

나는이 문제를 가지고 내 htaccess로는 슬래쉬를 제거했기 때문에 FAngle의 제안 @ 당이 - 그리고 내가 URL을 설정했다 /ajax/foo/bar/하지 /ajax/foo/bar. 리디렉션은 요청을 POST에서 GET으로 변경합니다. /를 제거하고 문제가 해결되었습니다!


이것은 나를 위해 원래 질문에서 언급 한 정확한 문제를 해결했습니다. 나는 WAMP 3.0.6에 laravel 응용 프로그램 호스팅하고있어
İlter 케이건 OCAL

10

URL은 './api/add'실제로로 리디렉션되었습니다 './api/add/index.php'. 따라서 리디렉션 후 새 요청이 GET대신 사용하여 보낸이 기괴한 부작용POST

해결책

  • 전체 URL 사용 './api/add/index.php'
  • 또는 슬래시를 추가합니다 './api/add/'.

6

내 POST가 GET을 보내는 곳에서도이 동작을 발견했습니다. 시나리오는 매우 독특하지만 누군가에게 도움이 될 수도 있습니다.

이것은 역할이 선택되거나 선택 취소되었을 때 즉각적인 조치로 ajax (게시물)를 사용했던 내 사용자 역할 편집 페이지에서 나에게 발생했습니다.

또한 역할 정보가 변경 될 때마다 사용자를 재 인증 (및 리디렉션)하도록 서버를 구성하여 클레임이 새로 고쳐졌습니다.

잔인한주기는 다음과 같이 끝났습니다.

  1. 첫 번째 역할 업데이트-POST-200 성공

  2. 다음 역할 업데이트-POST-302 Found-> Redirect (Chrome의 네트워크 모니터가 아닌 Fiddler를 사용할 때까지이 사실을 알아 차리지 못했습니다)

  3. (2) (동일한 URL)에서 호출 리디렉션-GET-404 찾을 수 없음 (게시물 만 허용했기 때문에)

  4. 고토 (1)

Ajax 요청 (Accept Types 기반)을 감지하면 재 인증 / 클레임 업데이트를 우회하도록 서버를 변경했습니다.


와! 비슷한 일에 직면했습니다. 분명히 내 컨트롤러 수준에서는 새 컨트롤러 끝점에 포함되지 않은 세션 매개 변수를 예상하고 있었고 302를 수행 한 다음 GET을 수행했습니다. 고마워 친구.
Nimila Hiranya

5

나는 dataType: 'jsonp'그것을 사용할 때 요청을 GET. 에 나는 그것을 변경 dataType: 'json'은 변경 GETPOST.


이 행동이 관찰 된 이유가 무엇입니까?
Saurabh Sarathe

@SaurabhSarathe — JSONP는 GET 요청 만 생성 할 수있는 스크립트 요소를 생성하여 작동합니다.
Quentin

3

비슷한 문제가 있었고 https://내 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"
});

이것은 HTTP와 HTTPS 간의 문제처럼 들립니다 (예 : www.someurl.com에 유효한 인증서가 없음)
Alexis Wilke 2018

2

저에게는 코드 조각이 괜찮아 보이지만 확실하게하려면 $ .ajax 대신 $ .post를 사용할 수 있습니다.

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

jquery 링크 : http://api.jquery.com/jQuery.post/


8
post$ .ajax ({type : 'POST'})의 축약 방법 일뿐입니다.
Viktor S.

예, 그러나 코드가 좋아 보입니다. 내가 그것을 테스트 할 때, 그것은 약간의 포스트 요청을합니다
Mr_DeLeTeD

1

.htaccess 파일을 확인하거나 요청을 리디렉션 할 수있는 다른 항목을 검색하십시오.


1

나는 같은 문제가 있었고이 질문을 찾았지만 답변으로 문제가 해결되지 않았습니다. 결국 contentType아약스 요청에서 필드를 제거하여 해결합니다 .

contentType: "application/json",

1

이 문제가 있었는데 IIS의 URL 재 작성 모듈로 밝혀졌습니다.

ASP.NET MVC 및 WebAPI를 사용하고 있습니다. 소셜 네트워크에서 두 개의 다른 페이지로 동일한 URL을 보지 않도록 소문자 URL을 강제하는 규칙을 만들었습니다.

예를 들면 :

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

vs

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

그러나 이것은 어떻게 든 내 ajax 요청을 엉망으로 만들었습니다. 규칙을 비활성화하고 문제가 해결되었습니다.


0

매우 일반적인 실수는 제출로 버튼 유형을 사용하고 양식의 방법을 변경하지 않는 것입니다 (기본적으로 가져옴).

버튼 유형 제출을 사용하지 않았는지 확인하고 게시 할 양식 방법을 변경 한 경우

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.