1

このコードは Chrome と Firefox では機能しますが、IE9 では機能しません ... ヒントが必要です ...

var obj = {
    data: [],

    json: function() {
        var self = this;
        $.getJSON("highscore.json", function(resp) {
            self.data = resp.splice(0);
        });
    }
};

アップデート:

あなたの助けをthx ...

これは ie9 の問題でした。つまり、エラー コード「c00ce56e」がスローされました。これは文字セットの問題です。PHPスクリプトで別のヘッダーを試してみます...

thx @すべて

4

1 に答える 1

4

あなたのコードは私には問題ないように見えますが、jsonリクエストが完了するまでデータが入力されないことを除けば、ajaxは非同期であるため、これは瞬時ではありません。

obj.json();
alert(obj.data); // []
setTimeout(function(){
    alert(obj.data); // ["foo","bar","foobar"]
},5000);

更新
requestというプロパティをオブジェクトに追加し、その中に$.getJSONリクエストを保存することをお勧めします。その時点では、リクエストからいつでもデータを取得できるため、データをオブジェクトに直接保存することは意味がありません。

var obj = {
    request: {done:$.noop,fail:$.noop,always:$.noop},

    json: function() {
        this.request = $.getJSON("highscore.json");
    }
};
obj.json();
// you can run the following as many times as you need to use the data.
obj.request.done(function(data){
    alert(data.splice(0));
});

現在の形式では、リクエストにコールバックを追加する前に.json()を呼び出す必要があることに注意してください。

于 2012-04-25T18:02:55.060 に答える