这是我尝试过的:
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 GET 。
当我使用 JSON 内容类型从终端运行 curl GET 命令时,它就像一个魅力,并且吐出数据没有问题,即curl -v -X GET -H "Content-Type: application/json" -d '{"data":"bla"}' http://codes.local/test.php
我不确定这会有多大帮助,但我找到了一个 PHP Fiddle 站点并将示例代码粘贴在那里只是为了让每个人都更容易,这里是链接: http: //phpfiddle.org/main/code/u4b -xkh
非常感谢您的帮助。
编辑:修复了 SilverBlade 指出的 'application/json' 中的拼写错误并更新了 PHP Fiddle 链接(空输出仍然存在,换句话说仍然无法正常工作)。我应该在上面说明的问题php://input
是实际上是空的,通过 jQuery 发布时根本没有数据 - 与 curl GET 结合使用时没有问题。
Edit2:我没有使用 IIS,感谢 robertdeniro (heh) 指出这一点。