使用PHP和跨站点问题进行JQUERY自动完成

时间:2010-03-09 20:18:16

标签: php jquery cross-browser

我正在尝试在文本框中加载一系列城市/国家/地区,以使用jquery自动填充功能进行显示。为此,我将自动完成附加到文本框并调用名为SEARCH.php的PHP例程。如果SEARCH在同一台服务器上,这可以正常工作。

当我尝试从不同的服务器(在这种情况下,ASP服务器)调用搜索时,我得到一个javascript PERMISSION DENIED错误,我想由于跨脚本问题。问题是由行

引起的

xhr.open(type,s.url,s.async);

在jquery1.3.2中

有没有解决方案?

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

我假设您的PHP和ASP服务器在不同的(子)域上运行 - 如果是这样,那么您可以正确地假设这是Javascript标准定义的跨域脚本限制。

据我所知,没有纯Javascript解决方案具有良好的跨浏览器兼容性(某些浏览器可能有更宽松的限制)。从长远来看,我们都希望通过跨源资源共享来解决这个问题,这种共享被定义为HTML5的一部分:
http://www.w3.org/TR/access-control/

如何解决这个今天的

  1. 使用服务器端代理脚本
    您可以在PHP服务器上创建一个新脚本(即ASP-Proxy.php),它将从ASP获取数据服务器。这将允许您避免跨域限制,因为PHP脚本将与您确认正常工作的Search.php脚本驻留在同一服务器上。
    Google透露this very simple implementation,但那里是一个非常强大和/或安全的脚本。

  2. 使用Flash执行查询
    Flash有自己的处理跨域请求的机制,因此您可以使用站点上的小型Flash对象作为客户端你的jQuery脚本的代理。我不是Flash开发人员,所以其他人必须在此提出建议:
    http://www.google.com/search?q=flxhr+jquery

    请注意,您可能需要在ASP服务器的根目录中创建跨域策略文件才能使其正常工作:
    {{3 }}

答案 1 :(得分:1)

最简单的解决方案是让服务器上的脚本调用其他服务器的脚本,然后从服务器返回结果。