我正在尝试在文本框中加载一系列城市/国家/地区,以使用jquery自动填充功能进行显示。为此,我将自动完成附加到文本框并调用名为SEARCH.php的PHP例程。如果SEARCH在同一台服务器上,这可以正常工作。
当我尝试从不同的服务器(在这种情况下,ASP服务器)调用搜索时,我得到一个javascript PERMISSION DENIED错误,我想由于跨脚本问题。问题是由行
引起的xhr.open(type,s.url,s.async);
在jquery1.3.2中
有没有解决方案?
感谢您的帮助
答案 0 :(得分:3)
我假设您的PHP和ASP服务器在不同的(子)域上运行 - 如果是这样,那么您可以正确地假设这是Javascript标准定义的跨域脚本限制。
据我所知,没有纯Javascript解决方案具有良好的跨浏览器兼容性(某些浏览器可能有更宽松的限制)。从长远来看,我们都希望通过跨源资源共享来解决这个问题,这种共享被定义为HTML5的一部分:
http://www.w3.org/TR/access-control/
如何解决这个今天的:
使用服务器端代理脚本
您可以在PHP服务器上创建一个新脚本(即ASP-Proxy.php
),它将从ASP获取数据服务器。这将允许您避免跨域限制,因为PHP脚本将与您确认正常工作的Search.php
脚本驻留在同一服务器上。
Google透露this very simple implementation,但那里是一个非常强大和/或安全的脚本。
使用Flash执行查询
Flash有自己的处理跨域请求的机制,因此您可以使用站点上的小型Flash对象作为客户端你的jQuery脚本的代理。我不是Flash开发人员,所以其他人必须在此提出建议:
http://www.google.com/search?q=flxhr+jquery
请注意,您可能需要在ASP服务器的根目录中创建跨域策略文件才能使其正常工作:
{{3 }}
答案 1 :(得分:1)
最简单的解决方案是让服务器上的脚本调用其他服务器的脚本,然后从服务器返回结果。