2012-10-08 60 views
0

類似於$.post API我做的:jquery.post不與對象字面工作

$.post('http://...', POST_BODY, function(data) {...}); 

POST_BODY       GIVES ME 
{name:'test'}      Empty response 
{'name':'test'}      Empty response 
{"name":"test"}      Empty response 
'{"name":"test"}'     stdClass Object([name] => test) 
JSON.stringify({"name":"test"})  stdClass Object([name] => test) 

例如

$.post('http://...', {name:'test'}, function(data) {...}); 

我的PHP其餘功能:

function postContact(...) { 
    $request = Slim::getInstance()->request(); 
    $body= json_decode($request->getBody()); 
    print_r($body); 
} 

爲什麼我不能使用對象文本作爲jQuery的API描述?這是我的服務器端還是客戶端?

+2

你如何定義對象? – undefined

+0

用「eg ...」編輯,使其更清晰 – Cotten

回答

4

你明白這個錯誤。傳遞對象文字將導致jQuery將對象的每個屬性作爲關鍵字,並將所有值轉換爲字符串並將其轉換爲post參數,其形式爲key1=val1&key2=val2。當然,這不是JSON,因此json_decode默默地失敗。

+0

是的,謝謝。我的錯誤,我認爲第二個參數將被轉換爲JSON。這在文檔中很清楚,它只是POST數據... – Cotten

3

jQuery實際上不會將「對象字面量」發佈到您的PHP腳本中。它被轉換爲一個查詢字符串,並作爲POST數據發送,就像正常發佈表單一樣。

你不需要json_decode任何東西,你只需要讀取$_POST數組,並獲得它的值。

由於您發送的是JSON字符串作爲POST正文,但您的其他示例將標準查詢字符串作爲POST正文發送,因此最後2個示例可以正常工作。