2015-04-04 96 views
0

我使用json在Javascript中創建了ajax請求,但$ _POST變量爲空。

var userid = "james"; 
var score = 200; 
var jsondata = { 
userid: userid, 
score: score 
}; 
data = JSON.stringify(jsondata); 
req = new XMLHttpRequest(); 
req.setRequestHeader("Content-Type", "application/json"); 
req.open("POST", 'functions.php', true); 
req.send(data); 

我functions.php文件看起來是這樣的:

print "CONTENT_TYPE: " . $_SERVER['CONTENT_TYPE'] . "<BR />"; 
$data = file_get_contents('php://input'); 
print "DATA: <pre>"; 
var_dump($data); 
var_dump($_POST); 
var_dump($_GET); 

然而這一切給了我一個空數組。請幫忙嗎?

+0

嘗試使用數據提供密鑰名稱 - var data =「name = james」;' – 2015-04-04 05:45:08

回答

0

我認爲你是不正確的發送數據,

使用,

req.send("name=James"); 
+0

用JSON怎麼樣?我的數據真的是JSON。 var jsondata = { 「userid」:userid, 「score」:score }; data = JSON.stringify(jsondata); (數據); 請問這是正確的嗎? – 2015-04-04 13:57:44

+0

感謝您的幫助。但它仍然不起作用。還有其他建議嗎? – 2015-04-04 14:32:37

+0

@ user99615請更新你的問題,以反映你到底在做什麼。這將幫助你得到一個準確的答案。 – vbrmnd 2015-04-06 05:53:19

0

$_POST只被填充的形式編碼和多編碼數據。您的數據編碼爲JSON,應通過php://input(根據this question)訪問。

$data應該包含JSON。如果沒有,則可能是由於您未能設置請求的Content-Type標頭。

req.setRequestHeader("Content-Type", "application/json"); 
+0

謝謝你的幫助。我添加了req.setRequestHeader(「Content-Type」,「application/json」)。我也試過req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');但是php://輸入仍然顯示一個空數組。 – 2015-04-06 23:51:58

0

除了將線req.setRequestHeader("Content-Type", "application/json");req.open("POST", 'functions.php', true);下,因爲XHR對象的狀態必須打開設置一個頭,您的代碼是完全可操作的。

你的問題在別的地方。

  • 你如何檢查你的php顯示?
  • 是你的ini conf。合適嗎?在file_get_contents('php://input');之前嘗試做ini_set("allow_url_fopen", true);
  • 檢查php.ini中的參數post_max_size。它應該是8M或10M(沒有MB但是M並且只有M,否則php會將它們插入爲0)

檢查php.ini的解釋參數的最佳方法是用一個空的.php文件<?php phpinfo(); ?>並啓動它;然後檢查「核心」部分。

+0

謝謝!這解決了我的問題。我使用了file_get_contents('php:// input'),並且最終得到了我的json結果。謝謝! – 2015-04-07 03:59:01