【问题标题】:Is it possible to load a cross domain web page through AJAX?是否可以通过 AJAX 加载跨域网页?
【发布时间】:2013-04-08 15:18:47
【问题描述】:

我目前正在使用 jQM 开发移动 Web 应用程序。

虽然我在寻找问题的答案,但找不到任何好的答案。

这是我的目标:

  1. 在另一个域中下载网页的特定元素。
  2. 通过对话框显示数据。

由于跨域问题,我坚持第一步。

有人写过使用带有回调函数的 JSONP,但似乎该技术仅在处理 JSON 格式时有效。

我还了解到,由于安全问题,JavaScript 不支持在另一个域中下载 html 页面。

他们说的对吗?

有没有办法通过 JavaScript 实现我的目标?

【问题讨论】:

  • 您可以向本地服务器提交请求,让该请求检索外部页面,然后将其返回以响应 AJAX 请求。我不确定有没有更好/更简单的方法。
  • 您没听错——除非您可以控制外部域,并且可以将其配置为允许来自第二个域的 AJAX,那么您可以使用 AJAX 从外部域检索数据的唯一方法是使用 JSONP。
  • @AnthonyGrist 感谢您提出另一个想法,但这听起来很棘手。
  • @epascarello 感谢您的链接。 MDN 有很多有用的文档。

标签: javascript jquery ajax jsonp jquery-mobile


【解决方案1】:

对于这个问题有很多解决方法(JSONP、反向代理、“Access-Control-Allow-Origin”等),在 SO 上的一个非常广泛的线程中进行了描述: Ways to circumvent the same-origin policy

【讨论】:

  • 哇,第一个链接也很有用!谢谢!
【解决方案2】:

最好的方法是使用本地代理。换句话说:在脚本 X 中执行请求服务器端,并从您的 javascript 调用此脚本 X。这样,您的“跨域”查询就会从服务器发生,并且没有任何限制。

【讨论】:

  • 感谢您的建议。通过提出问题,我可以学到许多我从未想过的方法:)
【解决方案3】:

这有两种可能。

首先,只有在外部服务器设置了 cors 标头时:http://enable-cors.org/server_apache.html。然后就可以正常加载了。如果没有设置该标头,则无法直接设置。

其次,您可以将服务器端用作代理。这仅在您对静态资源执行 GET 请求时才真正有用。否则服务器上的负载会非常高。如果您没有要使用的服务器,则可以使用 YQL,但这对于生产用途来说是粗略的。 http://davescoolblog.blogspot.com/2012/02/client-side-cross-domain-data-yql-hack.html

【讨论】:

  • 使用标题的方式,它最适合你。适用于 postgetjson
  • 但如果他们无法控制其他域,那么这是不可能的。
  • 并非所有浏览器都完全支持,IE7 不支持 CORS,IE8/9 需要插件(或您自己的修改)才能将 CORS 与 jQuery 的 ajax 方法一起使用。
  • @PitaJ,你的意思是 cors 标题?我没有外部服务器的权限。
【解决方案4】:

JSONP 允许跨域共享任何 Javascript 对象。字符串是 Javascript 对象,在您的情况下,您可以为元素提供标记以包含为字符串并使用标准 Javascript 技术来处理它。

如果您愿意,您也可以使用Cross-origin resource sharing,它的支持较少,但不会导致minor JSONP 性能下降(尽管它还有其他性能缺陷,例如需要多个非 GET 请求)。

【讨论】:

    猜你喜欢
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2017-02-08
    • 1970-01-01
    • 2015-12-29
    • 2010-09-16
    • 2016-03-07
    相关资源
    最近更新 更多