【问题标题】:Can't get jQuery to get JSON from another domain (using JSONP)无法让 jQuery 从另一个域获取 JSON(使用 JSONP)
【发布时间】:2013-02-09 09:29:51
【问题描述】:

我正在使用一个 API(我制作并可以在必要时进行更改),它会吐出一些 JSON(使用 PHP 的 json_encode,所以它是有效的)。我在另一个域的另一个网站上使用它来检索数据。

不幸的是,我似乎无法让它工作。发出请求,据我所知,从 Chrome 开发人员工具中检索数据(结果已从 API 下载)。不过似乎没有进行进一步的处理。

请求 URL 如下所示(将“查询”替换为实际查询,在本例中为乐队名称):

http://gatekrash.com/api/v1?t=search&s=national&p=0&n=15&q=QUERY&callback=?

Link to results page with query being 'Noah and the Whale'

结果如下所示(有效 JSON):

[{"id":"4123","title":"Noah And The Whale","type":null,"start":"2011-03-30 19:30:00","end":"2011-03-31 00:30:00","venue":{"id":"154","name":"The Deaf Institute"},"place":{"id":"17374","name":"Manchester"},"source_count":"1","performers":""},{"id":"9317","title":"Noah And The Whale","type":null,"start":"2011-05-04 19:00:00","end":"2011-05-05 00:00:00","venue":{"id":"539","name":"Leeds Metropolitan University"},"place":{"id":"15473","name":"Leeds"},"source_count":"1","performers":""}]

我用来获取这些数据的 jQuery 如下所示:

$(document).ready(function(){
    getSearch("Noah and the Whale");
});
$(document).ready((function(query) {
getSearch = function(query) {
    url = "http://gatekrash.com/api/v1?t=search&s=national&p=0&n=15&q=" + query + "&callback=?";
    $.getJSON(url,
        function(json) {
            alert("Success!");
        }
    );
}
})());

据我所知,这应该工作。我在API所属的站点上使用基本相同的代码(减去回调=?)来毫无问题地检索数据,所以我认为这可能是一个跨域的事情。

解决方案在我看来肯定是那么明显和简单,但我没有成功让它发挥作用。

有什么想法吗?

【问题讨论】:

    标签: jquery json jsonp


    【解决方案1】:

    您需要一个回调才能使跨域 JSONP 工作。

    “P”代表“填充”;即使用函数调用。为了绕过跨域策略,对于每个 JSONP 请求,jQuery 在 DOM 中创建一个脚本标记,并以请求的 URL 作为源。 JSON 被加载到脚本标签中然后执行,就像任何其他脚本一样。问题是执行一个对象并没有做太多的事情,而是将一个函数调用包裹在它周围,以便将该对象作为参数传递给该回调。

    JSON:(通常使用 XMLHttpRequest 等作为文本直接加载到 javascript 中)

    { "really":"simple", "example":"object" }
    

    JSONP:(通常加载到脚本标签中以避免跨域策略)

    nameOfCallback({ "really":"simple", "example":"object" })
    

    后者将在 JSONP 加载时调用方法“nameOfCallback”,将对象作为唯一参数传递。

    对于未来的谷歌员工,这个this answer 可能会提供更多帮助。

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 2018-07-23
        • 1970-01-01
        • 2011-12-11
        • 2013-12-28
        • 1970-01-01
        • 1970-01-01
        • 2012-10-07
        • 1970-01-01
        • 2014-03-10
        相关资源
        最近更新 更多