使用 jQuery 和 JSONP 从不同服务器上的文本文件中检索数据

Posted

技术标签:

【中文标题】使用 jQuery 和 JSONP 从不同服务器上的文本文件中检索数据【英文标题】:Retrieving data from a text file on a different server using jQuery and JSONP 【发布时间】:2011-06-16 12:39:42 【问题描述】:

您好,我正在尝试做一些非常简单的事情,但是由于我对 JSONP 很陌生,所以我正在努力解决它。我要做的就是从不同域中的文本文件中检索一些 JSON(因此我需要使用 JSONP 来解决跨域问题)。我正在使用以下代码:

$.ajax(
        type: "GET",
        dataType: 'jsonp',
        url: "http://www.topshop.com/aboutus/show.txt",
        success: returnedMessage
);

function returnedMessage(data) 
    console.log(data.message);

我知道 JSONP 将 JSON 作为函数返回,但我不知道如何将生成的 json 对象打印到控制台。我很确定它可以完成,尽管我可以在 Firebug 的 NET 选项卡中看到它正在返回 JSON 作为响应。在 Firebug 控制台中,我收到一条无效的标签消息,我认为这是因为我没有以正确的方式处理 JSONP 请求。谁能帮我这个?

【问题讨论】:

【参考方案1】:

这应该可行:

$.getJSON('http://www.topshop.com/aboutus/show.txt?callback=?', function(data) 
  console.log(data);
);

【讨论】:

感谢奶昔的建议,但这也没有用。我再次在控制台中收到无效标签消息。【参考方案2】:

您的 JSONP 格式不正确。该文件包含 JSON 数据,而不是 JSONP 数据。您收到的错误消息是因为浏览器试图将对象作为代码运行。您需要围绕 JSON 数据进行函数调用:

callback(
  "message": "This is coming from staging."
);

由于文本文件不能将查询字符串与发送给它的函数名称一起使用,因此您必须使用jsonpCallback 属性来指定函数名称:

$.ajax(
  type: "GET",
  dataType: 'jsonp',
  jsonpCallback: 'callback',
  url: "http://www.topshop.com/aboutus/show.txt",
  success: returnedMessage
);

【讨论】:

感谢您的回答 Guffa,但它不起作用。我只是在 Firebug 控制台中收到相同的旧无效标签消息。我可能错了,但 jsonpCallback 属性不是 jQuery 1.4 的新属性,如果是这样,那可能就是我们目前使用 1.3.2 的原因。 @El Guapo:如果您仍然收到相同的错误消息,则说明您尚未更正 JSONP 文件的格式。 1.4 中添加了 jsonpCallback 是正确的,因此您必须检查 jQuery 在请求中发送的函数名称,以便您可以在 JSONP 数据中使用该名称。 好的,但是我将如何检查 jQuery 发送的函数名称是什么,因为它是动态的,不是吗?对不起,如果这是一个愚蠢的问题,但我对此有点陌生。

以上是关于使用 jQuery 和 JSONP 从不同服务器上的文本文件中检索数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery - JSONP 从托管在 Vagrant VM 上的第三方 Node.js 服务器获取数据

使用 jQuery 中止 JSONP ajax 请求

使用 Ajax/jsonp 从 Web Api 接收数据

API 停止支持 JSONP

JSONJSONPXML的区别

有没有办法在 jQuery 中获取类似 JSONP 的 XML 获取?