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

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

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

引自http://jquery.com上的ajax文档

注意:当’script’或’jsonp’是dataType时,所有远程(不在同一域)请求都应指定为GET(因为它使用DOM脚本标记加载脚本)。 需要XMLHttpRequest对象的Ajax选项不适用于这些请求。 完成时调用complete和success函数,但不接收XHR对象; 不调用beforeSend和dataFilter函数。

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

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

对于PHP,它使用header()函数完成:

 

CORS可以用作JSONP模式的现代替代品。 虽然JSONP仅支持GET请求方法,但CORS还支持其他类型的HTTP请求。 使用CORS使Web程序员能够使用常规的XMLHttpRequest,它支持比JSONP更好的error handling。 另一方面,JSONP适用于排除CORS支持的旧版浏览器。 大多数现代Web浏览器都支持CORS。 此外,虽然JSONP可能导致外部站点遭到入侵的XSS问题,但CORS允许网站手动解析响应以确保安全性。

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

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

波格丹,我希望这会有所帮助

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