javascript - 如何在 requireJS 中加载 JSONP?

标签 javascript callback requirejs jsonp requirejs-define

我正在尝试获取一个 JSONP 文件以在 requireJS 中加载。 docs说它应该像这样工作:

require(["http://example.com/api/data.json?callback=define"],
    function (data) {
        //The data object will be the API response for the
        //JSONP data call.
        console.log(data);
    }
);

我的 config.json 看起来像这样(没有换行符):

config({
    "default_language":"de-DE",
    "language_current":"de-DE",
    "language_selector":"translate",
    "language_set":"false"
});

所以我的 require 调用应该是:

require(["http://example.com/api/config.json?config=define"],
    function (data) {
        //The data object will be the API response for the
        //JSONP data call.
        console.log(data);
    }
);

但这样做只会返回config(回调函数!)未定义。我已经坐了一段时间了......并使用 async plugin 让它像这样工作, 但这种语法不起作用,因为我在定义上下文之外声明了一个函数。

var config = function(data) {
    var settings = {};

  // create application settings
  settings.language_default = data.default_language || "en-EN";
  settings.language_current = data.language_current || priv.settings.language_default;
  settings.language_selector = data.selector || "translate";
  settings.language_set = data.language_set || false;

  console.log(settings);
  // return response object
  return settings;
};

define([
    'async!http://example.com/api/config.json!config'
  ],
  config
);

这似乎可行,因为现在我特别将回调函数命名为config

如果我可以将 config 作为我的 define-callback 函数的名称传入,我想一切都会好起来的,但我能够做到的唯一方法是以上。

问题:
如何使用 requireJS 的默认方式或此处的加载程序插件提供程序在 requireJS 中正确加载 JSONP 文件 [ https://github.com/millermedeiros/requirejs-plugins/blob/master/examples/async.html]

这对于从 S3 加载的静态文件非常有效:

define([],
    function () {
        $.ajax({
            url: "http://www.example.com/api/configuration.json",
            dataType: "jsonp",
            jsonpCallback: "config", /* Unique function name */
            success: function(data){
                /* Do something with data */
                console.log(data)
            }
        });
    }
);

那么为什么在 requireJS 内部完成时它不起作用?

最佳答案

你错过了一件事:

http://requirejs.org/docs/api.html#jsonp

你应该这样使用:

require(["http://example.com/api/data.json?callback=define"],
    function (data) {
        //The data object will be the API response for the
        //JSONP data call.
        console.log(data);
    }
);

回调是包裹在jsonp中的对象:

如果您的回调define,那么使用define

define({
    "default_language":"de-DE",
    "language_current":"de-DE",
    "language_selector":"translate",
    "language_set":"false"
});

关于javascript - 如何在 requireJS 中加载 JSONP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17701904/

相关文章:

swift - Cocos2d,通过回调快速查找Spritebuilder时间轴动画何时完成

RequireJS:为什么相对路径适用于define(),而不适用于require()?

javascript - OnEventClicked函数问题

javascript - 我如何在angular js中查看Http中的所有缓存

c++ - 处理嵌套回调

javascript - 使用回调函数进行快速路由时未定义参数

angularjs - 未知提供商 : ngMessagesProvider with require. js

javascript - requireJS 模块的同步方法调用

javascript - 在输入类型文本中将小数点右对齐

javascript - Jquery 替换字符并应用类