2010-02-10 63 views
0

我想清理一些遺留代碼。

以下是切,做Ajax請求的代碼的主要部分的下降:

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

我試圖轉換爲:

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

遺留代碼填充$ HTTP_RAW_POST_DATA var傳統後端代碼(我不願意更改)使用的var。

當使用jquery調用時,$ HTTP_RAW_POST_DATA似乎沒有被填充,奇怪的是$ _POST []似乎是以及。

我注意到在比較兩個ajax調用時,螢火蟲的POST選項卡的區別在於,jquery版本具有「application/x-www-form-urlencoded」作爲進一步信息,因爲傳統調用不適用。

我認爲問題歸結爲使用jquery ajax請求發送的頭的類型,但我不知道我可以進一步使用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」。還有什麼想法? – thiswayup

+0

我在Ajax請求2個按鍵: 的contentType: '文本/ XML', 類型: '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 = On – user906825

1

那麼您是否嘗試更改內容類型?也許設置它等於一個空字符串(如你所說的傳統調用沒有提供內容類型)?

我有一個類似的問題,其中服務器期望原始發佈數據是JSON。將內容類型更改爲「application/json」後,它工作正常。