2013-01-10 73 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是你的朋友