2015-07-20 133 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