我从webhost获取som JSON数据时遇到了一些问题。所以我没有把这个功能分解为GET谷歌,它仍然没有检索数据。没有任何反应,我已将下面的功能添加到应用程序中的按钮(onclick,返回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).
如您所见,它在ajax之前和之后输出log
,而不是done
或fail
事件触发器。如你所见,我根据the doc启用了cors和allowCrossDomainPages。那我为什么要失败呢?谷歌不是我想读的源,但我甚至无法让它工作......
答案 0 :(得分:2)
如你所见,我已经启用了角色......
启用CORS(对于其他人的网站)不是你。要从google.com
检索数据,他们必须启用CORS并允许您的来源从中提取数据。 (有一个通配符*
,如果他们想让每个人都加载他们的内容。)
另请注意,浏览器必须support CORS。所有最新的现代桌面浏览器都像大多数移动浏览器一样,但请注意,IE8和IE9都要求您使用非标准XDomainRequest
对象,而不是XMLHttpRequest
(他们最终得到此正好在IE10中),jQuery为你做了不平滑的特定跨浏览器问题(不会,也不会)。但是有插件可以做到。
如果您控制远程端(例如,您正在从中检索数据的webhost),则可以通过响应预检调用和GET
来启用服务器级别的CORS。适当的回复标题。
更多:
答案 1 :(得分:0)
您可以使用代理通过网络服务器将呼叫路由到Google。如果您使用的是Microsoft IIS,则可以使用我在此处描述的URL重写模块cross domain AJAX using proxy。如果使用Apache,您可以使用mod_proxy通过网站的服务器重定向跨域调用。
这可能不太理想,但对您来说这可能是一个合理的解决方案。
答案 2 :(得分: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
}