0

ウィキペディア API を使用しているページがあります。しかし、JSONクロスドメイン制限には使用できないため、使用しますJSONP。次のようにクエリを実行すると、APIを使用できるようになりました

<script type="text/javascript">
function res(data){
  alert(data);
};
</script>
<script type="text/javascript" src="http://en.wikipedia.org/w/api.php?action=opensearch&search=api&callback=res&limit=10&namespace=0&format=json">
</script>

しかし、私はこれを使って使いたいですAJAX。これどうやってするの?jQueryを使用することを提案した人もいますが、プレーンなjavascriptでそれを行う方法を誰かが説明できますか?

非同期 XHR 呼び出しで JSONP を使用できる方法はありませんか?

スクリプト要素を作成してから削除することは避けたいものです。

4

2 に答える 2

3

JSONP 呼び出しは、scriptタグを使用するため、本質的に非同期ではありません。次のように、後でプログラムでこれらのタグを追加することにより、実行を遅らせることができます。

sendJsonpRequest = function (url, callback) {
    if (!(url && callback)) { return; }

    // create script element
    var script = document.createElement("script"),
        jsonpCallback = "jsonp_" + new Date(),
        done = false;

    url = url.replace(/\&$/, "") + "&callback=" + jsonpCallback;

    window[jsonpCallback] = function (args) {
        callback(args);

        // Garbage collect
        window[jsonpCallback] = undefined;
        try { delete window[jsonpCallback]; } catch (e) { }
        if (head) { head.removeChild(script); }
    };

    script.src = url;
    head.appendChild(script);
};
于 2011-07-27T21:49:46.930 に答える
0

プレーン Javascript JSONP ライブラリ: http://blog.eood.cn/jsonp-library-in-plain-javascript-with-timeout

于 2011-08-19T06:23:45.047 に答える