我正在尝试加载远程URL(或者只是测试以查看是否存在远程页面)。
这很好用:
$(function() {
$.ajax({
url:'localtest.html',
type: 'html',
success: function(content,code) {
alert(code);
$('body').html(content);
}
});
});
但是在远程URL中交换我什么也得不到:
$(function() {
$.ajax({
url:'http://www.google.com/',
type: 'html',
success: function(content,code) {
alert(code);
$('body').html(content);
}
});
});
有没有办法做到这一点?
答案 0 :(得分:3)
出于安全原因,AJAX不支持跨域调用。
传统方法是使用jsonp
答案 1 :(得分:2)
浏览器阻止Ajax跨域访问资源(SOP =同源策略)。它仅在服务器配置为指向您的域(或*或类似)的“Access-Control-Allow-Origin”时才有效。
答案 2 :(得分:2)
这是因为浏览器不允许跨站点请求,除非远程服务器通过发送Access-Control-Allow-Origin标头明确允许它。如果您只想测试存在,则可以在带有onload和onerror事件的图像标记中加载URL。您将无法访问远程URL的内容;这是为了安全。否则,例如,您可以加载Facebook并在他们不知情的情况下阅读某人的墙。
答案 3 :(得分:-1)
这不是一个正确的ajax电话。假设您正在进行检索操作,该类型应该是'GET'。什么应该是'html'是dataType属性。
$.ajax({
url:'http://www.google.com/',
type: 'GET'
dataType: 'html',
success:function(content,code)
{
alert(code);
$('body').html(content);
}
});
});
而且,正如任何人已经添加的那样,因为你正在调用google.com,你必须提供一个jsonp回调,因为相同的原始策略...希望有所帮助。
答案 4 :(得分:-1)
出于安全原因,AJAX不支持CORS(跨源资源共享)。
答案 5 :(得分:-2)
在AJAX调用中使用属性。
crossDomain: true
确保加载内容的html页面的元数据标记。