为什么如果您在不同的服务器上使用URL,jQuery.ajax()会抛出一个没有错误信息的错误?当url来自不同的服务器时,jQuery.ajax失败
回答
其因为在浏览器中实现XMLHttpRequest的跨域请求的限制。您可以通过使用JSONP作为格式来解决这个问题,否则您需要服务器端代理来处理请求。
从ajax documentation上http://jquery.com
注引用:所有的远程(不在同 域)的请求应指定 为GET时,“脚本”或“JSONP”是 的数据类型(因为它使用DOM脚本标记加载脚本 )。需要XMLHttpRequest对象 的Ajax选项 不适用于这些请求。 完成调用完成并成功的函数为 ,但不要求 接收XHR对象;调用前发送的 和dataFilter函数不是 。
ajax()方法在内部使用遵从相同域策略http://en.wikipedia.org/wiki/Same_origin_policy的XmlHttpRequest。 可以使用getJson()方法来进行跨域调用。
我希望这有助于 波格丹
因为如果同源策略jQuery将不允许这样做。最好的选择将使用一些代理服务器页面来获取所需的页面。
由于http://en.wikipedia.org/wiki/Cross-origin_resource_sharing说:
跨源资源共享(CORS)是一种机制,允许网页制作的XMLHttpRequest到另一个域。 1根据相同的原产地安全策略,这种“跨域”请求否则会被网页浏览器禁止。 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支持。CORS由大多数现代Web浏览器支持。 此外,虽然JSONP可能会导致外部网站被盗用的XSS问题,但CORS允许网站手动解析对 的响应,以确保安全。
JSONP或“带填充的JSON”是在JavaScript中使用的一种通信技术,用于 JavaScript。它提供了一种方法来请求来自不同域中的服务器的数据,这是典型Web浏览器所禁止的,因为相同来源策略的 。
这个jQuery插件会做一个基本的跨起源request.It不AJAX.But作品非常相似如AJAX
- 1. Apache http服务器重写URL失败
- 2. 来自服务器的Ruby POST调用失败
- 3. 不同的URL /同一服务器
- 4. 如何检查来自同一服务器或不同服务器的请求?
- 5. .NET 4.7失败时服务器TLS 1.1
- 6. jQuery.ajax()成功/失败时调用回调?
- 7. jquery.ajax何时运行失败回调?
- 8. 当我开始网格搜索时,h2o服务器失败
- 9. 当emacs尝试连接到ipython/jupyter服务器时ein失败
- 10. 当从tsql/freetds连接sql-azure时,服务器连接失败
- 11. 服务器级联失败
- 12. .htaccess URL重写失败 - 在此服务器上找不到请求的URL
- 13. 为来自同一服务器的不同域设置会话?
- 14. 返回来自不同服务器的相同响应
- 15. 绑定来自不同APK的服务
- 16. 来自OPC服务器的c#实时图表/图形来自OPC服务器
- 17. NGNIX Nextcloud的后向代理服务器URL重定向失败
- 18. 使一个WCF服务接受来自jQuery.AJAX的JSON数据()
- 19. 来自不同URL的不同登录
- 20. 无法自动进入服务器。连接服务器机器“abc”失败
- 21. 来自JQuery的Web服务调用失败
- 22. 当传输到服务器场中的不同服务器时,IsPostBack为false?
- 23. 当服务器和请求是本地服务器时,侦听SMTP工作,但是如果从远程服务器请求失败,则它会失败
- 24. 来自ggmap的地理编码在闪亮的服务器上失败
- 25. WCF,处理来自多个服务器的同时请求
- 26. 连接来自不同服务器的socket.io的错误
- 27. 回到失败的服务器
- 28. XULRunner下的javascript服务器失败
- 29. 为什么parseJSON在来自服务器的以下响应中失败?
- 30. 的NuGet推失败,417(预期失败)从远程服务器
如果接入服务提供服务器端处理,那么为什么jQuery的连需要处理对另一个域的调用,它只会在服务器端代码中处理,并传递给页面。 – stephenbayer 2012-07-02 18:40:57