使用JSONP和AJAX

时间:2011-07-27 21:43:38

标签: javascript jsonp wikipedia-api

我有一个页面,我正在使用维基百科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 个答案:

答案 0 :(得分: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);
};

答案 1 :(得分:0)