2016-07-25 64 views
0

的jQuery代碼工作:的jQuery JavaScript的主場迎戰阿賈克斯POST「功能

$.ajax({ 
    type: "POST", 
    url: "file.php", 
    data: { json: json }, 
    complete: function (data) { 
     var result = data.responseText; 
     console.log(result); // logs 'echo' from PHP file 
    } 
}); 

的JavaScript代碼仍然不工作:

var xhr = new XMLHttpRequest(); 
xhr.open("POST", "file.php", true); 
xhr.setRequestHeader('Content-Type', 'application/json'); 
xhr.onreadystatechange = function() { 
    if (xhr.readyState == 4 && xhr.status == 200) { 
     var result = xhr.responseText; 
     console.log(result); // supposed to log 'echo' from PHP file 
    } 
} 
xhr.send(JSON.stringify(json)); 

是不是這兩種方法相當於,還是我錯過了什麼?

假設 'file.php' 看起來是這樣的:

if(isset($_POST['json'])){ 
$obj = json_decode($_POST['json']); 
//some php operation 
// echo $obj keys and values 
} 
+1

必須調用打開後setRequestHeader()()https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest – Nitin

+2

請求頭可能是錯誤的(可能是'應用程序/ json'),但我很確定你必須stringify你的json:'xmlHttp.send(JSON.stringify(json));' – Will

+0

@很好,我敢打賭,我需要這樣做,但沒有修理它。 – Wagtail

回答

1
data : { json: json } 

被序列化到 '{ 「JSON」:{數據}}'

JSON.stringify(json) 

被序列化到' {}數據」和沒有‘JSON’鍵

你的JavaScript對象與‘JSON’添加到父包裝對象的關鍵

JSON.stringify({ json: json }); 
+0

這是將json字符串正確傳遞給json_decode($ _ POST ['json'])的PHP函數的解決方案,但未解決爲什麼JavaScript沒有返回與jQuery函數相同的console.log()值。如果您設置$,則爲 – Wagtail

+1

。ajax dataType爲「text」它們應該是相同的。當缺少$ .ajax時,會根據其內容猜測返回類型,並可能在將數據返回給您之前處理這些數據。請參閱:http://api.jquery.com/jquery.ajax/ [settings-dataType] – Steve