当url来自不同的服务器时,jQuery.ajax失败

时间:2009-07-29 16:21:49

标签: jquery ajax

如果您使用带有不同服务器的URL,为什么jQuery.ajax()会抛出一条没有错误消息的错误?

4 个答案:

答案 0 :(得分:11)

这是因为对XMLHttpRequests的浏览器中实现的跨域请求的限制。您可以使用JSONP作为格式来解决这个问题,否则您将需要服务器端代理来处理请求。

引用ajax documentation上的http://jquery.com

  

注意:所有遥控器(不是相同的   域名)请求应该被指定   当'script'或'jsonp'是GET时获取   dataType(因为它加载脚本   使用DOM脚本标记)。 Ajax选项   需要XMLHttpRequest对象   不适用于这些请求。   完整和成功的功能是   要求完成,但不要   收到XHR对象;之前发送   和dataFilter函数不是   调用。

答案 1 :(得分:6)

正如http://en.wikipedia.org/wiki/Cross-origin_resource_sharing所说:

  

跨域资源共享(CORS)是一种允许网页将XMLHttpRequests发送到另一个域的机制。1否则此类“跨域”请求将被禁止Web浏览器,根据相同的原始安全策略。 CORS定义了一种浏览器和服务器可以交互以确定是否允许跨源请求的方式。2它比仅允许同源请求更强大,但它比简单更安全允许所有这些跨源请求。

对于PHP,它使用 header() 功能完成:

<?php
header("Access-Control-Allow-Origin: http://example.com");
?>
  

CORS 可以用作JSONP模式的现代替代品。而   JSONP仅支持GET请求方法,CORS也支持其他方法   HTTP请求的类型。使用CORS可以让Web程序员使用   常规的XMLHttpRequest,它支持更好的错误处理   JSONP。另一方面,JSONP适用于传统浏览器   排除CORS支持。大多数现代Web浏览器都支持CORS。   此外,虽然JSONP可能导致外部站点所在的XSS问题   受损后,CORS允许网站手动解析响应   确保安全。

     

JSONP或“带填充的JSON”是一种用于的通信技术   JavaScript的。它提供了一种从服务器中请求数据的方法   不同的域,是典型的Web浏览器禁止的东西,因为   同源政策。

答案 2 :(得分:2)

ajax()方法在内部使用XmlHttpRequest,它遵循相同的域策略http://en.wikipedia.org/wiki/Same_origin_policy。 可以使用getJson()方法代替进行跨域调用。

我希望这有帮助, 波格丹

答案 3 :(得分:0)

因为如果同源策略jQuery不允许这样做。最好的选择是使用一些代理服务器页面来获取所需的页面。