我想从外部源获取实时汇率,所以我发现这个伟大的Web服务:的jQuery + JSONP +雅虎查询语言
该服务工作就像一个魅力,唯一不足的是它不提供JSONP结果,只提供XML。因此,在尝试使用jQuery $ .ajax()来使用此webservice时,我们遇到了跨浏览器问题。
所以我发现Yahoo Query Language它返回结果作为JSONP和mangae消耗其他web服务并返回结果。这也是工作,这里有一个例子网址:
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D'http%3A%2F%2Fwww.webservicex.net%2FCurrencyConvertor.asmx%2FConversionRate%3FFromCurrency%3DNOK%26ToCurrency%3DEUR'&format=json&diagnostics=true&callback=cbfunc
此URL返回JSONP结果和工作就像一个魅力,但是当我用这个在我的代码出现的问题:
$.ajax({
type: "GET",
url: urlToWebservice,
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
success: function(data) {
$("#status").html("OK: " + data.text);
},
error: function(xhr, textStatus, errorThrown) {
$("#status").html("Unavailable: " + textStatus);
}
});
当我尝试运行这段代码什么也没有发生,我可以看到在我的萤火虫此错误消息JavaScript调试器:
cbfunc is not defined
cbfunc是围绕JSON反应容器的名字,但为什么它SA没有定义?
编辑:
这是我的新代码,但我仍然得到cbfunc is not defined
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D'http%3A%2F%2Fwww.webservicex.net%2FCurrencyConvertor.asmx%2FConversionRate%3FFromCurrency%3DNOK%26ToCurrency%3DEUR'&format=json&callback=cbfunc",
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback: 'cbfunc'
});
function cbfunc(data) {
alert("OK");
}
与 “OK” 的消息从来没有发射...
卫生署..愚蠢的我来说,'函数cbfunc(数据)'是另一个函数里面,当我把它外面这个功能作为一个单独的功能,它接缝工作! – Martin 2010-06-24 22:23:43
为什么显式指定回调为'cbfunc',并且当你可以让jQuery处理事情并且在你的'success'回调中正常进行,就像你对非JSONP调用做的那样,它很难依赖这个函数的存在吗? – Anurag 2010-06-24 22:31:51