【问题标题】:jQuery ajax, get html cross domainjQuery ajax,获取html跨域
【发布时间】:2012-12-20 02:28:38
【问题描述】:

我有一个网页,我正在尝试使用 ajax 调用将一些来自另一个网页的 html 内容放入其中。但是我正在努力解决跨域问题。

$('.trigger').click(function(e) {
    e.preventDefault();
    $.ajax({
        url: 'http://myothersite.com',
        datatype: 'text/html',
        type: 'GET',
        success: function(data) {
            var content = data.responseText;
            console.log(content);
        }
    });
});

有人能建议我如何实现这一目标吗?

谢谢,

【问题讨论】:

    标签: jquery ajax


    【解决方案1】:

    不能在任何现代浏览器中跨域获取text/html

    我知道目前唯一有效的返回类型是jsonp


    或者你可以做一些cross-origin resource sharing

    【讨论】:

    • @MattBall 也是。我会将其添加到我的答案中。
    【解决方案2】:

    如果可以适当调整headers,就可以进行跨域请求了。

    为了让它工作,你需要改变客户端和服务器:

    客户:

    xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"];
    

    使用 jQuery 的客户端

    jQuery.support.cors = true;
    

    为了正确响应OPTIONS 请求,需要更改服务器。我写了an example for ASP.NET Web API,但是无论你在服务器上运行什么,概念都是一样的。

    如果您无法对服务器进行更改(例如它是第三方服务),您仍然可以使用old-school JSONP

    【讨论】:

    • 是否将jQuery.support.cors 设置为true;实际解决什么?例如 IE6 7 不支持 cors 也无法支持 cors,并且 IE8 无法通过 $.ajax 支持它,除非您对 $.ajax 进行更改。
    • 如果不设置为 true,CORS 将无法在任何浏览器中工作。 CORS 的工作原理是在发送实际请求之前发送一个 OPTIONS 预请求并验证响应。 CORS 绝对是一种“新浏览器”技术。
    • 例如,在 chrome 和 firefox 中,$.support.corstrue,因为 xhr 对象中存在“withCredentials”。
    • IE8 和 9 都使用 XDomainRequest 来处理 CORS 请求,jQuery 故意不使用这些请求。来源:bugs.jquery.com/ticket/8283
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 2011-06-19
    • 2013-02-28
    • 2011-03-31
    • 2013-06-04
    相关资源
    最近更新 更多