2012-03-21 2 views
1

데이터 매개 변수를 전달하지 않을 때 jQuery에서 PUT 및 POST ajax CORS 요청에 이상한 문제가 발생했습니다.데이터 인수가없는 jQuery PUT/POST ajax CORS 요청

그래서 헤더를 설정하여 서버에서 CORS를 활성화했습니다. 내가 예를 들어 수행 할 때 모든 것이 잘 작동이 만 발생하는 것이

$.ajax({ 
    url: "http://127.0.0.1/R/index.html", 
    type: "PUT" 
}); 

참고 : 나는 data 매개 변수를 설정하지 않고 동일한 요청을 수행 할 때

$.ajax({ 
    url: "http://127.0.0.1/R/index.html", 
    type: "PUT", 
    data: {foo:"bar"} 
}); 

그러나, 파이어 폭스는 지금까지 아약스를 게시하지 않고 반환 POST 및 PUT 메소드의 경우 요청에 전체 URL이 지정되고 http 데이터 매개 변수가 지정되지 않은 경우 또한 URL이 페이지 자체와 동일한 도메인에있는 경우에도 발생합니다 (CORS가 필요하지 않음). 전체 URL 대신 URL에 경로를 지정하면 발생하지 않습니다.

매개 변수를 전달하지 않고 POST/PUT을 수행하는 데 필요한 모든 단서 (서버가 '가짜'매개 변수를 허용하지 않음).

+0

:

그것은 같은 것을 사용하여 피할 수있다? 데이터 설정 : null 요청을 보냅니 까? 실제 요청/응답 헤더를 얻기 위해 Wireshark를 사용할 수 있습니까? – monsur

+0

요청이 전혀 전송되지 않습니다. 즉시 반환됩니다. 이 multipart/form-data 문자열을 만드는 함수에 버그가있을 수 있습니다 용의자. – Jeroen

답변

5

게시 된 데이터가없는 경우 도메인 간 아약스 요청에서 'multipart/form-data'인코더를 호출하면 jQuery의 버그가 발생합니다. 헤더를 설정중인 고르

if(jQuery.isEmptyObject(mydata)){ 
    $.ajax({ 
     url: "http://127.0.0.1/R/index.html", 
     type: "PUT", 
     contentType: 'application/x-www-form-urlencoded' 
    }); 
} else { 
    $.ajax({ 
     url: "http://127.0.0.1/R/index.html", 
     type: "PUT", 
     data: mydata 
    }); 
} 
+0

감사합니다. 내가 이것을 보았을 때까지 '405'오류 (Method Not Allowed)가 발생했지만 일부 브라우저에서만 오류가 발생했습니다. 그것을 위해 고쳐졌습니다. – quilkin