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];
}

返回未定义:/有什么问题!?我不知道...

编辑!'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

它的异步问题.. Ajax 调用被异步调用。

return scripts[id];

在ajax调用return.s之前执行

于 2012-10-01T05:20:54.090 回答
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 回答