0

我从我的虚拟主机获取 som JSON 数据时遇到了一些问题。所以不,我只将函数分解为 GET google,它仍然没有检索数据。什么也没发生,我在应用程序中的一个按钮上添加了下面的函数(onclick,return false yada yada):

loadGoogle: function () {

  console.log('Lets load Google!');

  $.support.cors = true;
  $.mobile.allowCrossDomainPages = true;

  $.ajax({
    type: 'GET',
    contentType: 'text',
    url: 'http://google.com'
  })
    .done(function (data) { console.log('GOOGLE IS LOADED'); })
    .fail(function (xhr, error, et) { console.log('GOOGLE WAS NOT LOADED'); });

  console.log('The end');
}

模拟期间控制台中的输出:

CommandString : DebugConsole/log/DebugConsole1659732817/"Lets load Google!"
Log:["Lets load Google!","DebugConsole1659732817"]
The thread 0xfb0 has exited with code 259 (0x103).
CommandString : DebugConsole/log/DebugConsole1659732818/"The end"
Log:["The end","DebugConsole1659732818"]
The thread 0xff4 has exited with code 259 (0x103).

如您所见,它log在 ajax 之后输出 before AND,但不输出doneorfail事件触发器。如您所见,我根据文档启用了 cors 和 allowCrossDomainPages 。那么为什么我在这方面失败了呢?谷歌不是我想阅读的来源,但我什至无法让它工作,所以......

4

3 回答 3

2

如您所见,我启用了cors ...

启用 CORS(对于其他人的网站)不取决于您。为了让您从中检索数据google.com他们必须启用 CORS 并允许您的来源从中提取数据。(有一个通配符,*如果他们想让每个人都加载他们的内容。)

另请注意,浏览器必须支持 CORS。所有最新的现代桌面浏览器和大多数移动浏览器一样,但请注意,IE8 和 IE9 都要求您使用非标准XDomainRequest对象,而不是XMLHttpRequest(他们最终在 IE10 中做到了这一点),并且 jQuery流畅为您解决特定的跨浏览器问题(不会,也不会)。不过,有插件可以做到。

如果您控制着远程端(例如,您从中检索数据的网络主机),那么您可以通过响应预检调用并GET使用适当的响应标头在服务器级别启用 CORS。

更多的:

于 2013-08-26T18:23:19.203 回答
0

您可以使用 Jsonp 代替 Json 并且应该没有问题:

     $.ajax({ 
        type: "POST",                                     
        url: 'http://DomainName.com/api.php',  
        dataType: 'jsonp',
        contentType: "application/json",
        cache: false,
      success: function(data)        
      {
       // append your data
      }
于 2013-08-27T00:00:32.433 回答
0

您可以使用代理通过您的网络服务器将呼叫路由到 Google。如果您使用的是 Microsoft IIS,则可以使用 URL 重写模块,正如我在此处使用 proxy 跨域 AJAX所描述的那样。如果使用 Apache,您可以使用 mod_proxy 通过您网站的服务器重定向跨域调用。

这可能并不理想,但对您来说可能是一个合理的解决方案。

于 2013-08-26T20:23:01.280 回答