2010-03-21 70 views
0

我需要使用javascript/jquery获取url而不是php。如何使用javascript/jquery获取url?

我读过,你可以做到这一点,如果你有一个PHP代理,但这意味着它仍然通过PHP。因此它仍然是提取它的服务器的IP地址。

只能用前端获取url,从而获取客户端的ip?

回答

5

对于AJAX请求存在Same origin policy。这可以防止Javascript(例如,本网站)向gmail.com(使用您的cookies)发出请求,阅读您的电子邮件并将其上传到StackOverflow服务器。在stackoverflow.com上的Javascript只能向该域上的页面发出AJAX请求。

正如您所看到的,这对安全至关重要。请求必须由运行在您的Web服务器上的代理完成 - PHP可以使用,但还有其他解决方案。例如,Ajax Cross Domain是一个AJAX库,与运行在服务器上的Perl脚本进行通信,以模拟其他域的AJAX请求。

也可以通过javascript include(脚本标签),图片标签等在其他域上发出请求,但在这些情况下,您无法读取页面内容。

您无法使用iframe执行此操作:脚本无法查看iframe的内部结构,除非它们与脚本位于同一个域中。

因此总之,使用代理。

+0

这意味着我必须使用服务器的IP地址获取页面?没有办法用客户端的IP获取它,然后将结果发送回我的服务器?但谷歌地图API不允许我们只从JavaScript提出请求,从客户端的IP获取结果?那么为什么那个工作呢? – 2010-03-21 02:07:24

+0

使用Google Maps API,您可以从Google的服务器加载Javascript(没有任何问题 - 您可以运行JavaScript,但您只能看到文件的内容)。平铺图片等位于Google的服务器上,但始终允许链接到外部图片。通过使用特殊请求书写

2

问题是,jQuery会使用AJAX获取url,并且由于潜在的安全性(根据same-origin policy),AJAX不会运行跨域。

但是,有一些方法可以模拟这种情况,如果您在iframe中加载页面,则可以通过在iframe上使用innerHTML来检索数据。 以下是使用jQuery的示例脚本:http://code.google.com/p/jquery-crossframe/

+2

现代浏览器将不允许您获取跨域框架的“innerHTML”。 – 2010-03-21 02:02:26

+0

你是对的,你只能通过片段与iframe进行交流。我仍然觉得这仍然是可能的。 – Wolph 2010-03-21 03:47:45