【发布时间】:2011-03-08 00:50:20
【问题描述】:
我想从外部来源获取实时汇率,所以我发现了这个很棒的网络服务:
这项服务的工作方式非常棒,唯一的缺点是它不提供 JSONP 结果,只提供 XML。因此,我们在尝试使用 jQuery $.ajax() 使用此 Web 服务时遇到了跨浏览器问题。
所以我找到了Yahoo Query Language,它以 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 响应的容器的名称,但为什么它说未定义?
编辑:
这是我的新代码,但我仍然得到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”消息...
【问题讨论】:
-
Doh.. 愚蠢的我,
function cbfunc(data)在另一个函数中,当我把它作为一个单独的函数放在这个函数之外时,它就可以工作了! -
为什么显式指定回调为
cbfunc并且当您可以让jQuery 处理事情并在您的success回调中正常进行时对该函数的存在有硬依赖,就像您对非-JSONP 调用?
标签: javascript jquery json web-services jsonp