我看到一些奇怪的行为,将 JSON 字符串从 PHP 发送回 Jquery 的 $.ajax 函数。
当我从浏览器访问我的 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 是否对文本做奇怪的事情?