我試圖看到使用XMLHttpRequest發送到服務器的json數據,但似乎服務器沒有收到它,當我運行JavaScript警報窗口會彈出,但不會打印任何東西。任何人都知道如何解決這個問題?由於使用POST方法從JavaScript將json數據發送到服務器的問題
在客戶端,Java腳本的
var obj = {"action": "nothing"};
var jsonString = "jsonString=" + JSON.stringify(obj);
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST","http://myserver/main.php",true);
xmlhttp.setRequestHeader("Content-type","application/json");
xmlhttp.setRequestHeader("Content-Length",jsonString.length);
xmlhttp.onreadystatechange = function()
{
if(xmlhttp.readyState === 4 && xmlhttp.status === 200){
alert(xmlhttp.responseText);
}
}
xmlhttp.send(jsonString);
在服務器上,PHP
if(isset($_POST['jsonString']))
echo $_POST['jsonString'];
'application/x-www-form-urlencoded'表示你必須urlencode字符串:'encodeURIComponent(JSON.stringify(obj))'。你也應該發送Content-Length:'xmlhttp.setRequestHeader(「Content-Length」,jsonString.length);'。並在'xmlhttp.onreadystatechange'中檢查'xmlhttp.status === 200'。 – Saxoier
@Saxoier謝謝我只是根據你的指示編輯了我的代碼,但不幸的是它仍然不能正常工作 – totalnoob
你的第一個版本已經工作了。也許你用apache的mod_rewrite('RewriteRule',...)或mod_alias('Redirect',...)重定向。然後,您可能會創建一個額外的GET-Request並釋放所有POST數據。看看Firebug-> Network。此請求不應該有3xx HTTP狀態碼。 – Saxoier