AMD模块需要AJAX调用的结果

时间:2015-02-25 20:48:47

标签: ajax module requirejs amd

我可以定义一个AMD模块,它的依赖是动态AJAX调用的结果吗?

例如:

define([ 'jquery', 'config' ], function ($, config) {
    $.get(config.API + 'getSomething', { key: config.KEY }).done(function (res) {
        // I want res to be what this module returns
    });
});

我可以这样做:

define([ 'jquery', 'config' ], function ($, config) {
    return $.get(config.API + 'getSomething', { key: config.KEY });
});

但是当我需要这个模块时,我必须附上一个done,我宁愿不这样做:

define([ 'something-module' ], function (something) {
    something.done(function (res) {
        // All my codes here
    });
});

如果我在考虑加载模块之前等待API调用的结果然后返回该调用的结果,那就更清洁了,但我不知道是否可能。

1 个答案:

答案 0 :(得分:0)

AMD模块的结果可以是任何类型的对象

基于Jquery AJAX documentation,您可以将异步参数设置为false并阻止进程完成请求

  

请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作

我建议您返回Promises作为模块的结果,以后可以实现或拒绝,并避免阻止浏览器。