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

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



답변

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

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

유형 : “POST”

  • jQuery 페이지의 예에서

방법 : “POST”

이제 POST입니다.

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

여기에 이미지 설명 입력


답변

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


답변

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

해결책

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


답변

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

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

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

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

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

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

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

  4. 고토 (1)

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


답변

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


답변

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


답변

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

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

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