2016-12-02 73 views
0

我的理解是正確的:Javascript Jquery JSON發帖 - 我的理解是否正確?

// JavaScript, jQuery 
$.ajax({ 
    url: '/post.php', 
    method: 'post', 
    data: JSON.stringify({a: 'a', b: 'b'}), 
    contentType: 'application/json' 
}); 

$ _ POST將有0個元素

眼下,PHP收到一個字符串,而不是一個對象。因此它不能作爲鍵/值來迭代它

由於已經構建了JSON,因此不需要進行串聯。

這應該在這種情況下,正常工作:

// JavaScript, jQuery 
$.ajax({ 
    url: '/post.php', 
    method: 'post', 
    data: {a: 'a', b: 'b'}, 
}); 

回答

2

the jQuery API documentation

數據選項可以包含形式KEY1的查詢字符串=值1 &鍵2 =值,或對象的形式{key1:'value1',key2:'value2'}。如果使用後一種形式,則在發送數據之前使用jQuery.param()將數據轉換爲查詢字符串。

如果傳遞一個字符串作爲data屬性的值,那麼這就是發送到服務器的值。如果傳遞對象,則對象會轉換爲參數字符串。

服務器期望參數是在HTTP查詢字符串的形式:

key1=value1&key2=value2&key3=value3 

如果你通過一個JSON字符串,它不會像她那樣,服務器將無法做到這一點的正常的參數處理。如果您擁有可以處理JSON的服務器代碼,那麼這不一定是錯誤或不好的。

+1

對於一個小更清晰在OP中的示例中:'JSON.stringify'將生成一個字符串'{「key1」:「value1」,「key2」:「value2」},直接傳遞對象將生成一個字符串'key1 = value1&key2 = value2 '。 –

+0

@KevinStich是的好點,我加了一點答案。 – Pointy

0
$.ajax({ 
    url: '/post.php', 
    method: 'post', 
    data: {a: 'a', b: 'b'}, 
    dataType: 'json' 
}); 

如果你分析被髮送到服務器後,你會發現:

a=a&b=b 

所以數據得到轉換成查詢字符串,而不基於需要JSON.stringify