如何使用jQuery AJAX加载跨域html页面?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用jQuery AJAX加载跨域html页面?相关的知识,希望对你有一定的参考价值。

如何使用jQuery AJAX加载跨域html页面?

假设我想使用jQuery AJAX在我的域外获取一个页面:

$.get('http://www.domain.com/mypage.html', function(data) {
  alert(data);
});

我可能会收到此错误消息:

XMLHttpRequest无法加载http://www.domain.com/path/filename。 Access-Control-Allow-Origin不允许使用null。

由于Same-origin policy,我们无法使用AJAX加载跨域页面。

我可以尝试使用'jsonp'来绕过这个限制:

$.ajax({
  type:     "GET",
  url:      url,
  dataType: "jsonp",
  success: function(data){
    console.log(data);
  }
});

但是如果这个网站不支持'jsonp'怎么办?这可能是个问题。

如果我只想阅读外部页面并解析其HTML,该怎么办?

答案

我知道这是一个老帖子。但是,我希望这会帮助正在寻找同样的人。

简直就是你不能。 - 同源策略或您需要为www.domain.com设置CORS头

但是,如果您只想向页面获取外部页面内容,则可以执行以下操作:

在服务器中创建端点以返回给定外部URL的HTML内容。 (因为您无法获取浏览器的外部内容 - 同源策略)

JS:

var encodedUrl = encodeURIComponent('http://www.domain.com/mypage.html');
$.get('http://www.yourdomain.com/getcontent?url=' + encodedUrl, function(data) {
    console.log(data);
});

Easiest way to read from a URL into a string in .NET - 可以使用它来创建/getcontent端点

另一答案

您可以使用'AJAX Cross Origin'一个jQuery插件来加载跨域HTML页面。 AJAX Cross Origin是一个允许Cross Origin AJAX请求的jQuery插件。有了这个插件,我们可以轻松绕过Same-origin policy并进行跨域请求。

它使用起来非常简单:

   $.ajax({
        crossOrigin: true,
        url: url,
        success: function(data) {
            console.log(data);
        }
    });

你可以在这里阅读更多相关信息:http://www.ajax-cross-origin.com/

以上是关于如何使用jQuery AJAX加载跨域html页面?的主要内容,如果未能解决你的问题,请参考以下文章

jquery 如何实现跨域载入其他网站的页面内容

jQuery中的ajaxjquery中ajax全局事件load实现页面无刷新局部加载ajax跨域请求jsonp利用formData对象向服务端异步发送二进制数据

JQuery的Ajax跨域请求原理概述及实例

CefSharp 和跨域

jquery ajax使用JSONP解决跨域问题

jquery ajax使用JSONP解决跨域问题