如果您使用带有不同服务器的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更好的错误处理.另一方面,JSONP适用于排除CORS支持的旧版浏览器.大多数现代Web浏览器都支持CORS.此外,虽然JSONP可能导致外部站点遭到入侵的XSS问题,但CORS允许网站手动解析响应以确保安全性.
JSONP或"带填充的JSON"是JavaScript中使用的通信技术.它提供了一种从不同域中的服务器请求数据的方法,这是由于相同的源策略而被典型Web浏览器禁止的.