2013-04-08 101 views
4

我目前正在开发一个带有jQM的移动Web应用程序。是否可以通过AJAX加载跨域网页?

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

这里是我的目标:

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

由于跨域问题,我被困在第一步。

有些人写过关于使用带回调函数的JSONP,但似乎这种技术只在处理JSON格式时才起作用。

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

他们对吗?

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

+2

您可以向本地服务器提交请求,检索外部页面,然后返回以响应AJAX请求。我不确定有更好/更简单的方法来做到这一点。 – 2013-04-08 15:22:00

+0

https://developer.mozilla。org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript – epascarello 2013-04-08 15:22:00

+0

您听说过的权利 - 除非您拥有对外部域的控制权,并且可以将其配置为允许来自第二个域的AJAX,那么您只能使用AJAX从数据库中检索数据一个外部域使用JSONP。 – Blazemonger 2013-04-08 15:22:21

回答

11

有针对此问题的解决方法很多(JSONP,反向代理,“访问控制允许来源”,等等。)在这里非常广泛线程描述上SO: Ways to circumvent the same-origin policy

据我所知,我唯一经常使用的另一个是James Padolseys解决方案:http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/

+1

谢谢,我决定用这种方式。它运作良好。 – 2013-04-08 15:35:44

+1

这里是每个人的链接 - http://jsfiddle.net/hxzyC/ – 2013-04-08 15:43:04

+0

哇,第一个链接也非常有用!谢谢! – 2013-04-08 15:48:59

2

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

如果您愿意,也可以使用Cross-origin resource sharing,虽然它还有其他性能缺陷,例如需要多个非GET请求,但支持得不到广泛支持,但不会产生minor JSONP性能影响。

5

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

+0

感谢您的建议。通过问一个问题,我可以学到很多我从未想过的方法: – 2013-04-08 15:47:44

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

+0

使用标题方式,它将最适合你。使用'post','get'和'json' – PitaJ 2013-04-08 15:24:23

+0

但是,如果他们没有控制其他域,那么这是不可能的。 – 2013-04-08 15:33:48

+0

它在所有浏览器中并不完全支持,IE7不支持CORS,IE8/9需要插件(或者您自己的修改)才能使用CORS和jQuery的ajax方法。 – 2013-04-08 15:36:12