2015-07-20 131 views
0

我有一個超級簡單的JS代碼,POST到我的本地服務器。 JS和PHP都在本地主機上,所以我現在不擔心跨站點問題。這裏是我的JS:

var ENDPOINT_BASE = ''; 
var ENDPOINT_USER_LOGIN = { url: '/user/login', method: 'POST'}; 
var ENDPOINT_USER_REGISTER = { url: '/user/register', method: 'POST'}; 

var toSend = {'credentials': { 'email':'1', 'password':'123'}}; 

$.ajax({ 
    method: ENDPOINT_USER_LOGIN.method, 
    url: ENDPOINT_BASE + ENDPOINT_USER_LOGIN.url, 
    contentType: "application/json", 
    data: toSend 
}); 

我的PHP很簡單:

<?php 
print_r($_POST); 

在Chrome調試器,我可以看到網絡電話進行,但是在$_POST接收到的響應總是空的,即它打印出來Array()

如果我在PHP中添加類似echo "abc";的東西,我可以在響應中看到它,所以它正確地打了那個URL。

我正在使用jQuery 2.1.4。

JS控制檯不打印出任何錯誤消息。

任何想法可能是錯的?謝謝!

+0

呢'的print_r(的file_get_contents(「PHP://輸入」)) ;'顯示什麼?如果你註釋掉'contentType',會發生什麼? – Ronnie

+0

實際上,兩種解決方案都解決了單獨收到任何東西的問題。我不知道有'php:// input'存在。 – Sandy

+0

@Dagon是的,我明確地設置方法爲'POST'。 – Sandy

回答

0

因爲您將標頭設置爲JSON,所以PHP沒有按照您的預期填充$ _POST。我相信它的默認值是url-form-encoded。

要麼不定義內容類型,或者如果你想發送實際的JSON,你可以做到這一點通過執行類似:

$postdata = file_get_contents('php://input'); 
$request  = json_decode($postdata); 
$credentials = $request->credentials; 
+1

這對於使用'php:// input'也很有用:http://stackoverflow.com/questions/8893574/php-php-input-vs-post – Sandy