2012-02-05 107 views
3

我嘗試後通過jQuery.ajax原始字符串()如何通過jQuery POST請求發送原始字符串?

例如,

contact_list=352345 

$.ajax({ 
     beforeSend: function(xhr){ 
      xhr.setRequestHeader('Content-Type', header); 
     } 
     }, 
     url: link, 
     type: type, 
     processData:false, 
     data: data, 
     success: function(data){ 
      console.log(data); 
     } 
    }); 

的我送JSON數據大多數時候,所以header='application/json'

在服務器端,我回顯$HTTP_RAW_POST_DATA並看到我的JSON條紋很好。

但是,我有時也想發送標準格式的數據。但是當我設置header='application/x-www-form-urlencoded'$HTTP_RAW_POST_DATA是空的。

ProcessData是錯誤的,所以不應該只是通過我的字符串?

作爲臨時解決方法,我只是將標題保留爲application/json,並忽略服務器上針對此特定端點的Content-Type

+0

真正令我難以置信的是,在網絡檢查員看來,請求有效載荷正常運行。例如,contact_list = 352345是否存在......也許這是一個PHP事物,表單數據不會顯示在$ HTTP_RAW_POST_DATA中? – speg 2012-02-05 14:46:29

回答

1

無需額外的工作。試試這個:

$.ajax({ 
    url: link, 
    data: data, 
    success: function(data){ 
     console.log(data); 
    } 
}); 

docs

processDataBoolean:

默認:true默認情況下,數據到數據選項傳遞作爲 對象(從技術上講,任何其他不是字符串)將被處理 並轉換成查詢字符串,適合默認 內容類型的「application/x-www-form-urlencoded」。如果要發送 DOMDocument或其他未處理的數據,請將此選項設置爲false。

+0

嗯,我想我很好奇,爲什麼它不是通過這個頭類型發送我的字符串,但它是爲應用程序/ JSON。 – speg 2012-02-05 07:29:08

+0

@speg。這不是解決問題嗎?我不明白你寫了什麼。 – gdoron 2012-02-05 07:33:47

+0

不知道,我現在在牀上:)。將在早上嘗試。我的意思是,爲什麼我能夠看到HTTP_RAW_POST_DATA,當頭文件類型是application/json時,不是application/x-www-form-urlencoded。就好像jquery正在爲後面的情況改變它,即使processData仍然是false。 – speg 2012-02-05 07:44:09

1

我寧願發送一個標誌,我的JavaScript函數來查看

所以你的功能將是什麼樣的輸入這樣

function processIt(request_type,link,type,data) { 
if(request_type == 'json') 
$.ajax({ 
    beforeSend: function(xhr){ 
     xhr.setRequestHeader('Content-Type', header); 
    } 
    }, 
    url: link, 
    type: type, 
    processData:false, 
    data: data, 
    success: function(data){ 
     console.log(data); 
    } 
}); 
else 
$.ajax({ 
url: link, 
data: data, 
success: function(data){ 
    //do something 
} 
}); 
} 

但這是,如果你想使用的功能它是。

+0

我有點結束了這樣做,但我仍然無法將頭設置爲'application/x-www-form-urlencoded'。如果我這樣做,不會傳遞我的字符串。理想情況下,我希望能夠將其設置爲服務器端的目的... – speg 2012-02-05 14:44:12