1

サーバーからのデータを解析しようとしています。有効なJSONに取り組んでいますが、常に。を取得しJSON unexpected character errorます。

このコードを検討してください:

var shows = $.parseJSON(fetchData('contentShows', this.id)); // Returns a valid JSON data

$.each(shows, function(index, value) {
    console.log(value.id);
});

fetchData = function(dataRequest, id) {
    var data = $.ajax({
        url: '/shows.php',
        type: 'GET',
        dataType: 'json',
        success: function(data) {
            console.log(dataRequest);
            console.log(data);
        }
    });
    return data;
}

これはサンプルJSONです:

[
    {"shows":[],"spool":"/home","name":"Test Name","id":2}
]
4

1 に答える 1

1

問題は、fetchData関数がJSONテキストを返さず、jqXHRオブジェクトを返すことです。(したがって、これをに渡すと$.parseJSON、のような文字列に変換され[object Object]ます。これはもちろん無効なJSONです。)

その理由は、data変数を$.ajax呼び出しの結果に設定して返すためです。の戻り値$.ajaxjqXHRオブジェクトです。

ただし、呼び出しは非同期であるため、これを変更するだけでは不十分です。関数がすでに戻ったに完了します。

最善の策はfetchData、コールバックを受け入れるように変更してから、フェッチされたデータをコールバック内で使用することです。このようなもの:

fetchData = function(dataRequest, id, callback) {
    $.ajax({
        url: '/shows.php',
        type: 'GET',
        dataType: 'json',
        success: function(data) {
            console.log(dataRequest);
            console.log(data);
            callback(data);
        }
    });
}

このように使用されます:

fetchData('contentShows', this.id, function(showData) {
    var shows = $.parseJSON(showData);

    $.each(shows, function(index, value) {
        console.log(value.id);
    });
});
于 2013-03-15T09:44:11.427 に答える