使用.ajax()加载远程URL - 无法正常工作

时间:2012-01-30 09:09:29

标签: javascript jquery ajax

我正在尝试加载远程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);
        }
    });        
});

有没有办法做到这一点?

6 个答案:

答案 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页面的元数据标记。