2011-08-20 73 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