是否可以通过AJAX加载跨域网页?

时间:2013-04-08 15:18:48

标签: javascript jquery ajax jsonp jquery-mobile

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

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

这是我的目标:

  1. 在另一个域中下载网页的特定元素。
  2. 通过对话框显示数据。
  3. 由于跨域问题,我陷入了第一步。

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

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

    他们是对的吗?

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

4 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

这有两种方式。

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

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

答案 3 :(得分:2)

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

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