2013-01-10 111 views
-1

我正尝试使用jsonp从http://www.ikea.com/us/en/catalog/products/10176292 中提取一些文本。如何使用jsonp获取数据?

为了测试它是否正常工作,这是我做

$.getJSON("http://www.ikea.com/us/en/catalog/products/10176292?format=json&jsoncallback=?",function(data) { 
$('h1').text(data.modified); 
}); 

这不起作用,所以它可能没有有效的,但所有的JSONP文件,我在谷歌找到请使用Twitter或Flickr的API为例。我很确定宜家没有API,所以这些方法并不能真正帮助我。

但是这确实从Flickr

$.getJSON("http://api.flickr.com/services/feeds/[email protected]&format=json&jsoncallback=?",function(data) { 
$('h1').text(data.title); 
}); 

工作并返回文本我试图这一点,因为我看到这个例子http://www.foxycart.com/whos-using-foxy/case-studies/modernash,它似乎与JSONP从宜家获取文本数据的工作。我不需要任何复杂的东西,只是为了能够检索一些简单的文本。

有人可以请指出我在正确的方向或给一些提示。

感谢

+3

[该URL不返回JSON](http://www.ikea.com/us/en/catalog/products/10176292/?format=json&jsoncallback=foo),更不用说JSONP了。你不能只是神奇地附加一些查询参数,并期望返回JSON(P);服务器必须实际支持它。 –

+0

我试过了,URL本身给出了一个'301永久移动'并重定向到_HTML_页面。它也不会发送任何[CORS头文件](https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS),所以你会点击[相同来源策略](https://开发者。 mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript)。 –

+0

我有点觉得它不会像这样工作,但我很好奇你们认为这个开发者怎么做到的?我试图这样做是因为我看到了他的例子,使用他的书签购物车,他能够使用JSONP从宜家拉取数据并使用它。 http://www.foxycart.com/whos-using-foxy/case-studies/modernash –

回答

0

您可以使用Ajax补充你的getJSON(在这里看到官方的文档 - http://api.jquery.com/jQuery.getJSON/),那么它是超级容易声明JSONP。

$.ajax({ 
     dataType: "jsonp", 
     url: 'http://api.flickr.com/services/feeds/[email protected]&format=json&jsoncallback=?', 
     data: data, 
     success: function(data) { 
      $('h1').text(data.modified); 
     }); 

编辑:@Matt Ball是对的。在使用上面的ajax调用之前,您需要确保您使用的URL返回实际的json。您应该能够导航到所需的URL并查看原始JSON。然后所有上面的函数将做相应的取出和解析。

+0

我知道宜家没有API,但我很好奇这个开发人员是怎么做到的? foxycart.com/whos-using-foxy/case-studies/modernash借助他的书签购物车,他可以将数据从宜家网站上提取出来并发送到购物车。这是否违反同一原产地政策? –

+0

因此,在查看您的示例网站后,他们特别提到了“API。JSONP购物车交互,用户同步,Webhooks”。由于宜家似乎没有API,而且您的URL并非真正的JSON,它看起来像FoxyCart中的人不使用json,并且可能使用自定义webhook /脚本。所以我想回答你是一个问题,如果没有JSON可以获取,则无法获取JSON。这个家伙(https://github.com/moritzh/ikea-data)写了一个gem来从宜家取东西,但它比一些简单的jQuery更高级。我建议对AJAX,REST和基本http请求进行一些研究。 – Swordfish0321

0

与宜家的链接不是JSON,因此您无法从中提取。它看起来像宜家没有公共API。所以,你将无法从他们那里获得任何数据来使用。

对于Flickr,您正处于正确的轨道上。这是你如何做到的。

$.ajax({ 
    dataType: 'jsonp', 
    url: 'http://api.flickr.com/services/feeds/[email protected]&format=json&jsoncallback=?', 
    success: function(data){ 
     console.log(data); 
    } 
}); 

如果你想得到标题,你会做data.title等等。

+0

我知道宜家没有API,但我很好奇这个开发者是如何做到的? http://www.foxycart.com/whos-using-foxy/case-studies/modernash借助他的书签购物车,他可以将数据从宜家网站上提取出来并发送到购物车。这是否违反同一原产地政策? –

0

它在我看来,他们只是从网站上刮取数据。所有的产品信息都存储在html中,并将它们添加到自己的购物车中。

因为你拖动图像到他们的书签我看着影像中保存@http://www.ikea.com/us/en/catalog/products/20011408/#/80193735数据:

<img id="productImg" src="/us/en/images/products/lack-side-table__0115088_PE268302_S4.JPG" border="0" alt="LACK Side table IKEA The high-gloss surfaces reflect light and give a vibrant look. Easy to assemble. Low weight; easy to move." title="LACK Side table - high gloss red, 21 5/8x21 5/8 &quot; - IKEA" width="500" height="500" class="mn_global_shadow ui-draggable" style="width: 244px; display: inline-block; height: 244px; left: 0px; top: 0px;"> 

在标题中我们得到的名称,光洁度,颜色和大小。
价格和数量保存在整个网站看起来标准的id/classes中。

这是怎么一回事,我没有看过,但它似乎并不复杂。 希望这有助于。

0

您可能需要提供一些自定义标题。 Wireshark是你的朋友