Javascript 如何在requireJS中加载JSONP?

Javascript 如何在requireJS中加载JSONP?,javascript,callback,requirejs,jsonp,requirejs-define,Javascript,Callback,Requirejs,Jsonp,Requirejs Define,我正在尝试将一个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); } );

我正在尝试将一个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);
    }
);
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如下所示(没有换行符):

因此,我的要求应该是:

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
,它可以像这样工作,但是这种语法不起作用,因为我在define上下文之外声明了一个函数

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文件[

这对于从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内部执行时它不起作用呢?

好的,这很有效

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

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

可能还有其他人。

我也遇到了类似的问题,不得不使用
$.ajax()
加载gapi脚本。

您缺少一件事:

您应该这样使用:

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);
    }
);
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({
    "default_language":"de-DE",
    "language_current":"de-DE",
    "language_selector":"translate",
    "language_set":"false"
});

这不是JSONP。您需要编写服务器端代码来处理
callback=
。因此,我不能只存储带有callback({“foo”:“bar”})的硬编码文件;?@SLaks:从静态服务器使用
$.ajax
没有问题(请参阅我的编辑)。