【发布时间】:2013-01-30 21:56:38
【问题描述】:
我看到从 PHP 向 Jquery 的 $.ajax 函数发送回 JSON 字符串时的一些特殊行为。
当我从浏览器访问我的 php 脚本或通过命令行使用 php 调用它时,它返回完全有效的 JSON(使用 jsonlint.com 测试)。但是,当我从我的 HTML 文件进行 AJAX 调用时,我总是返回 NULL。
我基本上是从 PHP 做这个的:
// case in a switch that handles command 'getinfo':
$url = "http://someapi.com:1234/api/entity/" . $tagid;
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
curl_setopt( $ch, CURLOPT_USERPWD, "user:pass" );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
$reply = curl_exec( $ch );
header('Content-Type: application/json');
echo $reply;
这会吐出这个:
[ {
"class" : "entity",
"guid" : "IT_EQUIPMENT_abcdef12345677890",
"retired" : false,
"deletable" : true,
"$aAssetTamper" : false
} ]
我尝试了设置和不设置 RETURNTRANSFER 以及设置和不设置 header() 行。在 HTML 方面,我使用 Ajax 调用:
$.ajax({
url: "gimmedata.php",
dataType: "json",
cache: false,
async: false,
data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val },
success: function( data, textStatus ) {
// rfcode location
console.log(data);
}
});
状态总是返回“成功”,数据总是“[]”。
奇怪的是,如果我从 PHP 脚本复制输出,然后将其粘贴回脚本本身,然后在不经过 curl 的情况下回显该字符串,那么我的 AJAX 调用工作正常:
echo '
[ {
"class" : "entity"
"guid" : "IT_EQUIPMENT_abcdef12345677890",
"retired" : false,
"deletable" : true,
"$aAssetTamper" : false
} ]';
return;
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
curl_setopt( $ch, CURLOPT_USERPWD, "user:pass" );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
$reply = curl_exec( $ch );
header('Content-Type: application/json');
echo $reply;
我不知道它会是什么。有什么线索吗? curl_exec 是否对文本做奇怪的事情?
【问题讨论】:
-
您确定它返回的是有效的 JSON,您是否尝试过 json_encode 来查看是否有任何改变?