0

测试函数绑定到按钮单击事件。我是 jquerymobile 的新手,我正在尝试获取 JSON 响应。我已经完成了 JQUERY 文档所说的,但没有调用回调函数。

你能告诉我我做错了什么吗?

function test(evt) {

    // addNote($('#title').val(),$('#note').val());
    alert("hello");// <----This alert is displayed

    $.get("http://weather.yahooapis.com/forecastjson?w=2502265",{}, function (data) {
        alert("testing");//<--This alert is NOT displayed
        alert("Data Loaded: " + data);//<--This alert is NOT displayed
    }, "json");   

    alert("Hello");//// <----This alert is displayed
} 
4

3 回答 3

0

首先,àlert("hello")预计将在任何其他人之前开火。如果调用成功,将在某个时间点调用处理程序。

但是,由于跨站点策略,这不太可能发生。如果您查看开发控制台,您可能会看到类似XMLHttpRequest cannot load http://weather.yahooapis.com/forecastjson?w=2502265&_=1348150852704. Origin http://stackoverflow.com is not allowed by Access-Control-Allow-Origin.

如果您希望为错误添加处理程序,您也可以这样做

只需将代码扩展为

$.get("http://weather.yahooapis.com/forecastjson?w=2502265",{}, function (data) {
alert("testing");//<--This alert is NOT displayed
alert("Data Loaded: " + data);//<--This alert is NOT displayed
}, "json").fail(function(jqXHR, textStatus) {
  alert( "Request failed: " + textStatus );
});

注意原始代码后的 .fail 。如果与远程服务器的通信出错,将调用提供的函数

于 2012-09-20T14:20:23.083 回答
0

我确定您的页面不在http://weather.yahooapis.com网站上。除了您自己的站点(您的 html 页面从该站点下载)之外,您不得进行 ajax 调用以从任意站点获取数据,这称为同源策略!如果你想从其他站点获取数据,你应该使用 json-rpc,即动态创建一个脚本标签并将 src 属性设置为你要获取数据的地址。如果该站点支持这样的协议,它会将请求的数据作为 js 片段返回,并作为 GET 参数的集合调用回调。

于 2012-09-20T14:28:31.990 回答
0

由于相同的源策略,您不能从不同的域发出请求。

您可以向其他域发出 JSONP 请求,但问题是您调用的 Web 服务器返回的是 JSON,而不是 JSONP。但是,我刚刚建立了一个您可以使用的 JSON/JSONP 代理。它将向您指定的 URL 发出请求,将其转换为 JSONP 并返回。

调用代理并将 Yahoo URL 放入url参数中,并将数据类型更改为"jsonp"

$.get("http://jsonp.guffa.com/Proxy.ashx?url=weather.yahooapis.com%2fforecastjson%3fw=2502265",{}, function (data) {
  ...
, "jsonp");

演示:http: //jsfiddle.net/Guffa/bwZMZ/

信息页面:http: //jsonp.guffa.com/

于 2012-09-20T16:08:17.860 回答