4

我试图让一个 JSONP 文件加载到 requireJS 中。文档说它应该像这样工作:

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(["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 (the callback function!) is undefined。我已经坐了一段时间了......并使用async 插件让它像这样工作,但是这种语法不起作用,因为我在定义上下文之外声明了一个函数。

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 的默认方式或此处的加载器插件提供程序 [ https://github.com/millermedeiros/requirejs-plugins/blob/master/examples/async.html ]在 requireJS 中正确加载 JSONP 文件?

这适用于从 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 中完成时它不起作用呢?

4

3 回答 3

2

你错过了一件事:

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

callback是包裹在 中的对象jsonp

如果你callback定义然后使用define

define({
    "default_language":"de-DE",
    "language_current":"de-DE",
    "language_selector":"translate",
    "language_set":"false"
});
于 2016-08-10T23:19:47.530 回答
0

我遇到了类似的问题,不得不求助于$.ajax()加载 gapi 脚本。.

于 2015-04-09T01:16:40.503 回答
0

好的。这行得通。

define(["async"],
    function () {
        callback = function(d) {
            console.log("callback called");
             console.log(d);
        };

        require([
            "async!http://www.example.com/api/configuration.json"
        ],
        callback
        );
    }
);

也许还有其他人。

于 2013-07-17T15:08:05.023 回答