использование JSONP с AJAX - PullRequest
0 голосов
/ 28 июля 2011

У меня есть страница, где я использую 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?

Разве я не могу использовать JSONP с асинхронными вызовами XHR?

Создание, а затем удаление элемента сценария - это то, чего я хочу избежать.

Ответы [ 2 ]

3 голосов
/ 28 июля 2011

Вызовы 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);
};
0 голосов
/ 19 августа 2011

Библиотека простого Javascript JSONP: http://blog.eood.cn/jsonp-library-in-plain-javascript-with-timeout

...