我想从外部来源获取实时汇率,所以我找到了这个很棒的网络服务:
该服务运行得非常出色,唯一的缺点是它不提供 JSONP 结果,仅提供 XML。因此,在尝试使用 jQuery $.ajax() 使用此 Web 服务时,我们遇到了跨浏览器问题。
所以我发现雅虎查询语言 http://developer.yahoo.com/yql它以 JSONP 形式返回结果,并且还 mangae 来使用其他 Web 服务并向我返回结果。这也有效,下面是一个示例 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&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);
}
});
当我尝试运行此代码时,没有任何反应,并且我可以在我的 Firebug javascript 调试器中看到此错误消息:
cbfunc is not defined
cbfunc 是包围 JSON 响应的容器的名称,但为什么它说未定义?
EDIT:
这是我的新代码,但我仍然得到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”消息永远不会被触发......