1

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

4

3 に答える 3

0

JavaScriptから渡されるデータが間違っています:

data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val },

.valプロパティとしてではなく、関数として使用する必要があります。

data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val() },
于 2013-02-14T23:49:07.907 に答える