2011-08-20 39 views
0

我嘗試從wikilocation.org獲取數據。據我所知,我需要使用jsonp來管理這個。這基本上可與下面的代碼:使用jQuery從Wikilocation獲取數據

$.ajax({ 
    url:'http://api.wikilocation.org/articles', 
    dataType: "jsonp", 
    cache: false, 
    jsonp:'onJsonPLoad', 
    jsonpcallbackString: "addPoi", 
    data: {'lng': newPoi.lon, 'lat': newPoi.lat, 'limit':5, 'radius':100, 'jsonp':'addPoi'} 
}); 

我的問題是,我不想調用另一個函數(addPoi的片段)能夠與結果的工作。我neet結果直接在函數內,我做了ajax調用。那可能嗎?我錯過了什麼嗎?

回答

2

這將工作:Example

$.ajax({ 
    url: 'http://api.wikilocation.org/articles', 
    dataType: "jsonp", 
    jsonpCallback: 'addPoi', 
    cache: false, 
    success: function(data) { 
     alert(data) 
    }, 
    data: { 
     'lng': newPoi.lon, 
     'lat': newPoi.lat, 
     'limit': 5, 
     'radius': 100, 
     'jsonp': 'addPoi' 
    } 
}); 

你必須發送wikilocation函數名,並告訴jQuery的期待什麼像你這樣。然後,你需要做的一切都添加success: function (data) { ... }

+0

但是,這也將會啓動在這種情況下,「jsonpCallback'-功能(addPoi)。爲什麼這條線很重要? – madc

+0

...看起來成功功能根本不會觸發。 – madc

+0

它的確如此:http://jsfiddle.net/d754b/1/ – Joe

1

通過JSONP使用jQuery訪問WikiLocation更簡單的方法是使用$ .getJSON功能與JSONP回調參數爲沿着這樣的:

$.getJSON("http://api.wikilocation.org/articles?lat=51.500688&lng=-0.124411&limit=1&format=json&jsonp=?", function(data) { 
    // do what ever you want with the returned data 
    console.log(data); 
}); 

從jQuery文檔:

從jQuery 1.2起,如果您指定JSONP回調,則可以加載位於另一個域上的JSON數據。 回調採用「example.com?callback=?」的形式。 jQuery自動替換'?'使用與全局範圍不衝突的隨機方法名稱。您不必自己指定方法名稱。

請注意,您嘗試調用的網站需要支持JSON-P輸出。回調參數可能因API而異,例如Yahoo Pipes需要「_callback =?」

請記住,該函數後面的行將在回調之前執行。

而且從WikiLocation文檔:

JSONP(可選) - 如果你正在使用的 'JSON' 的格式,你可以選擇通過這個參數來提供一個JSONP回調。這將導致輸出被封裝在一個回調函數中(您提供的名稱作爲參數的值)以用於跨域使用。

感謝您使用WikiLocation - 我建立了它;)

+0

感謝您的摘錄和提供這個偉大的API! – madc