以下是我尝试过的:
JS:
$.ajax({
type: 'GET',
contentType: 'application/json; charset=UTF-8',
data: JSON.stringify( { data: 'bla' } ),
dataType: 'json',
success: function( data ) {
alert(data);
},
error: function( data ) {
alert('error: ' + data);
}
});
PHP:
<?php
if ( $_SERVER['REQUEST_METHOD'] == 'GET' )
{
$data = json_decode( file_get_contents('php://input') );
echo json_encode( $data );
}
?>
输出:
null
如果您将GET与POST交换,那么它的工作原理就像一种魅力。“为什么不直接使用POST呢?”,我使用POST来执行数据库中的插入。我有一种预感,这可能是因为它强烈地想要这种格式的GET数据:email=bob@mctest.com&firstname=Bob&lastname=Mctest
。但我不知道为什么,因为内容类型被设置为application/json,这有点让人费解。为了在这里添加我上次编辑的内容,php://input
是空的,换句话说,它没有向它发送任何数据,但是它仍然工作正常,使用来自终端的curl没有问题。
当我使用JSON内容类型从终端运行curl命令时,它的工作方式就像一种魅力,没有问题地释放数据,即curl -v -X GET -H "Content-Type: application/json" -d '{"data":"bla"}' http://codes.local/test.php
我不知道这会有多大帮助,但我找到了一个PHP站点,并在其中粘贴了示例代码,这只是为了让每个人都更容易,下面是链接:http://phpfiddle.org/main/code/u4b-xkh
非常感谢您的帮助。
编辑:修复了SilverBlade指出的'application/json‘中的拼写错误,并更新了PHP链接(null输出仍然存在,换句话说,仍然不起作用)。问题是,我应该在上面说明,php://input
实际上是空的--当通过jQuery发布时,里面根本没有任何数据--当与curl一起使用时没有问题。
Edit2:我不使用IIS,谢谢罗伯特德尼罗(heh)指出这一点。
发布于 2013-09-28 01:24:26
我的怀疑是正确的,造成问题的原因是jQuery $..ajax/$. GET在使用GET时强迫查询字符串,即使您已经将内容类型设置为JSON,这是没有意义的,但我必须对手册进行剖析,以找出原因。
下面是我的工作代码,它提供了一个与curl和$..ajax/$. GET一起工作的解决方案。
JS:
$.ajax({
type: 'GET',
url: 'manage.php',
data: 'user=bla',
dataType: 'json',
success: function( data ) {
// code here...
}
});
PHP:
$get = !empty( $_GET ) ? json_decode( json_encode( $_GET ) ) : json_decode( file_get_contents('php://input') );
发布于 2013-09-27 01:58:19
内容类型有拼写错误,
contentType: 'appllication/json; charset=UTF-8',
它应该是
contentType: 'application/json; charset=UTF-8',
其次,您可以通过指定URL进行检查。
发布于 2013-09-27 02:42:19
SilverBlade可能已经发现了您的问题,但是XHR和PHP之间仍然存在通信问题。PHP必须返回正确的标头,否则jQuery解释可能会发生奇怪的事情。
尝试:
标题(“内容-类型:application/json”);
https://stackoverflow.com/questions/19041442
复制相似问题