【问题标题】:AMD module requires result of AJAX callAMD 模块需要 AJAX 调用的结果
【发布时间】:2015-04-28 01:15:36
【问题描述】:

我能否定义一个依赖于动态 AJAX 调用结果的 AMD 模块?

例如:

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 调用的结果,然后返回该调用的结果,那会更干净,但我不知道这是否可能。

【问题讨论】:

    标签: ajax module requirejs amd


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多