0

私は初心者なので、簡単に行きます:

この $.ajax 関数が xhr データを正しい場所に追加しない理由がわかりません。

    // gets the cache data from our php file
function getcaches() {
    $.ajax({
        method: 'get',
        url: "php/findcache.php",
        dataType: "json", // return type data is json
        success: function(data){ // <-- data is in json format
            //parse the json data
            $('#caches').append($('<p>' + data[0].name + '</p>'));
        },
        error: function(data) {
            console.log('error');
        }
    });
    return false;   
}

それが関連するJavaScriptです。firebugでデータを確認できるので、データがオブジェクトに適切に保存されていることはわかっています...

[OU0397] => stdClass Object
    (
        [code] => OU0397
        [name] => A Mighty Oak in the Open
        [location] => 28.527633|-81.125167
        [type] => Virtual
        [status] => Available
    )

私は自分が間違っていることを理解していません。ポインタはありますか?

4

2 に答える 2

2

コード サンプルには XSS 脆弱性があります (名前に「<」文字が含まれているとどうなりますか?)。

適切な HTML エンコーディングなしでテキスト値を HTML に追加しないでください。文字列を連結する代わりに、jQuery の text() メソッドを使用して要素のテキストを設定できます。

$('#caches').append($('<p/>').text(data[0].name));

出力が正しくない理由の 1 つになる可能性があります。

$('#caches') を実行することで、Firebug または Chrome 開発者ツールを使用して jQuery CSS セレクターをデバッグできます。一致した要素の配列が返されます。

于 2012-04-24T02:20:06.603 に答える
1

Firebug がある場合は、ここにブレークポイントを設定します。

$('#caches').append($('<p>' + data[0].name + '</p>'));

そして、検査しdataます。デバッグ データがOU0397キーとして表示されました。PHP の によりjson_encode、辞書が与えられる可能性が高いことを意味します。ディクショナリは別の方法でトラバースされます (例: for i in data { ... })。

最初の結果のみを返すように PHP を変更することも検討できます。これにより、JavaScript が簡素化され、ネットワーク オーバーヘッドが削減されます (例: use json_encode(current($data)))。

于 2012-04-24T02:12:06.730 に答える