2

これを確認してください:

    var scripts = {};

require = function(src){
    var id = Math.round(+new Date()/1000);

    $.ajax({
        url: src + '.json',
        type: 'GET',
        dataType: "json",
        cache: false,
                    async: false,
        success : function(data){
            scripts[id] = data;
        }
    });

    return scripts[id];
}

return undefined :/ 何が問題なの!? わからない...

編集!'async : false' と実行します!

4

4 に答える 4

3

これは、呼び出しで $.ajax が非同期であるためです。

return scripts[id];

上記の行は、successコールバックがトリガーされる前でも実行されます。

于 2012-10-01T05:19:37.087 に答える
1

これは非同期呼び出しです。戻ると、スクリプトは空です。

原因を検証するために、

window.scripts = {};

require = function(src){
var id = Math.round(+new Date()/1000);

$.ajax({
    url: src + '.json',
    type: 'GET',
    dataType: "json",
    cache: false,
    success : function(data){
        window.scripts[id] = data;
        alert(window.scripts)
    }
});

//return scripts[id];

}

アラートの後、window.scripts の値を参照してください

于 2012-10-01T05:20:38.280 に答える
0

あなたの問題は、呼び出しが非同期であることです。これは、呼び出しが終了する前にメソッドが返されることを意味します。

scripts[id] を返す代わりに、代わりにこれを試してください:

require = function(src){
    var id = Math.round(+new Date()/1000);

    $.ajax({
        url: src + '.json',
        type: 'GET',
        dataType: "json",
        cache: false,
        success : function(data){
            scripts[id] = data;
            DoStuff(scripts[id]);
        }
    });
}

DoStuff(data) {
    // do whatever it is you were going to do after the return.
}
于 2012-10-01T05:23:50.930 に答える
0

その非同期の問題.. Ajax呼び出しは非同期で呼び出されます。

return scripts[id];

ajax 呼び出し return.s の前に実行されます

于 2012-10-01T05:20:54.090 に答える