4

requireJS にロードする 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);
    }
);

私の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 (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 によるデフォルトの方法またはこちらのローダー プラグイン プロバイダーを使用して、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 内で実行すると機能しないのはなぜですか?

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 に答える