2010-02-10 3 views
0

일부 기존 코드를 정리하려고합니다.

$j.ajax({ 
     type: "POST", 
     url: "fetchData.php", 
     success: function(data) { 
      mapFn._showSidebarHotels(data); 
     }, 
     cache: false,    
     data: "51.5&-0.12", 
     dataType: "json", 
     processData: false 
    }) 

는 레거시 코드는 $를 채 웁니다 : I가 변환하려고

var xmlHttp; 
    try { 
    // Firefox, Opera 8.0+, Safari 
      xmlHttp=new XMLHttpRequest(); 
    } catch (e) { 
    // Internet Explorer 
      try { 
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
      } catch (e) { 
        try { 
          xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
        } catch (e) { 
          $j.prompt("Your browser does not support AJAX!"); 
        return; 
        } 
      } 
    } 
    xmlHttp.onreadystatechange=function(){ 
      if(xmlHttp.readyState==4){ 
      // Get the data from the server's response 
       // returns json data 
        //i know, don't ask 
       eval(xmlHttp.responseText); 

       // doing stuff with the json data 
       ... 
       etc 
      } 
    } 
    xmlHttp.open("POST","fetchData.php",true); 

    //sample data passed 
    var request ="51.5&-0.12"; 
    xmlHttp.send(request); 

:

다음 아약스 요청을 수행하는 코드의 주요 부분의 아래 컷 HTTP_RAW_POST_DATA 변경하지 않는 레거시 백엔드 코드가 사용하는 var.

jquery 호출을 사용할 때 $ HTTP_RAW_POST_DATA가 채워지지 않는 것 같고 $ _POST []가 비어있는 것 같습니다.도 마찬가지입니다.

두 개의 ajax 호출을 비교할 때 방화 광 탭의 차이점은 jquery 버전이 기존 호출과 달리 "application/x-www-form-urlencoded"라는 추가 정보가 있다는 점에 주목했습니다.

jquery 아약스 요청과 함께 보낸 헤더 유형에 문제가 있다고 생각하지만 jquery를 사용하여 이러한 문제를 얼마나 더 조종 할 수 있는지 잘 모르겠습니다.

내 질문은 :

내 JQuery와 전화가 올
  • 인가? 주어진 $ POST 배열이 비어 있습니다.
  • jquery의 매개 변수를 사용하여 $ HTTP_RAW_POST_DATA를 어떻게 채울 수 있습니까?

답변

2

데이터는 전송되기 전에 쿼리 문자열로 변환됩니다. 이 처리는 processData를 false로 설정하여 회피 할 수 있습니다.

예 :

xml 문서를 서버로 데이터로 보냅니다. processData 옵션을 false로 설정하면 데이터를 문자열로 자동 변환 할 수 없습니다.

var xmlDocument = [create xml document]; 
$.ajax({ 
    url: "page.php", 
    processData: false, 
    data: xmlDocument, 
    success: handleResponse 
}); 
+0

위 예제에서 "processData : false"를 이미 설정했습니다. 더 이상 아이디어가 없습니까? 의 contentType : '텍스트/XML', 유형 : – thiswayup

+0

나는 아약스 요청에 2 개 이상의 키가 'POST'다음으로 , 내가 를 사용하여 PHP의 내용을 읽을 수있는 경우 ('POST'== $ httpMethod) { // $ body = file_get_contents ("php : // input"); $ body = $ HTTP_RAW_POST_DATA; } HTTP_RAW_POST_DATA를 작동 시키려면 php.ini 설정을 사용했습니다. always_populate_raw_post_data = 켜기 – user906825

1

콘텐츠 유형을 변경하려고 했습니까? 아마도 빈 문자열과 같게 설정했을 것입니다 (기존 호출이 content-type을 제공하지 않는다고 말했던 것처럼)?

서버에서 원시 포스트 데이터가 JSON이 될 것으로 예상했던 것과 비슷한 문제가있었습니다. content-type을 'application/json'으로 변경 한 후 제대로 작동했습니다.

관련 문제