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 はテキストに対して奇妙なことをしていますか?