我看到一些特殊的行爲,從PHP發回JSON字符串到JQuery的$ .ajax函數。jquery/PHP:獲得NULL從捲曲字符串返回
當我訪問我的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組有和沒有頭都嘗試,也()線。在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腳本複製輸出,然後將其粘貼到腳本本身,然後回顯該字符串不經過捲曲去,然後我的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來查看是否改變了任何內容? – adeneo 2013-02-14 23:35:49