jQuery ajax 跨域调用和权限问题

Posted

技术标签:

【中文标题】jQuery ajax 跨域调用和权限问题【英文标题】:JQuery ajax cross domain call and permission issue 【发布时间】:2011-01-12 21:48:54 【问题描述】:

我有这个轮询脚本来检查是否在服务器上创建了文本文件。在本地工作得很好,但当文件位于不同的域时失败。我将如何重写它以获得跨域支持?

$.ajax( 
    url: 'http://blah.mydomain.com/test.txt', 
    type: "GET", 
    success: function(result)  
        //Success!
        window.location.replace(Successful.aspx');
    , 
    error: function(request, status, error)  
        setTimeout("VerifyStatus(" + pollingInterval + ")");
    
    );

编辑: 我最终使用 YQL 来解决跨域问题,虽然它有效,但 YQL 确实很慢,这增加了相当多的性能开销。任何人都可以为跨域 JQuery 调用提出更好的解决方案吗?

【问题讨论】:

【参考方案1】:

在您的$.ajax() 调用中将数据类型设置为“JSONP”。您必须确保响应格式正确才能正常工作。***在JSONP 上有一个很好的部分。

【讨论】:

如果您可以控制目标文件的内容,这很好。 我确实可以控制 txt 文件的创建。使用 jsonp,我是否必须在文本文件中写入 JSON 字符串?我正在使用 ASP.NET,但无法将它们组合在一起 @user102533 正确。您可以访问 json.org 以获取 ASP.NET JSON 序列化程序的列表。【参考方案2】:

Ajax 不会跨域。你最好的选择是在本地域上创建一个 php 页面来进行检查,然后使用你的 ajax 调用去-that-。

【讨论】:

如果您无法控制目标文件的内容,这很好。 我确实可以控制文本文件(它由服务创建) 答案已过期。做跨域 Ajax 有两种直接方式和间接方式。 1. JSONP,使用带有回调的<script> 标签注入而不是XMLHttpRequest。有些人可能会争辩说 JSONP 不是 Ajax,但这只是语义。 2. Cross-origin resource sharing (CORS). JSONP 应该适用于所有浏览器,CORS 需要浏览器的支持。两者都需要服务器上的支持。 3. 间接通过 YQL 等代理。【参考方案3】:

要通过 jQuery 获得跨域 AJAX,您可能需要查看以下内容: http://github.com/jamespadolsey/jQuery-Plugins/tree/master/cross-domain-ajax/

【讨论】:

请再试一次,或者试试这个github.com/jamespadolsey/jQuery-Plugins/blob/master/… 那么,我所要做的就是将 jquery.xdomainajax.js 添加到项目中,并且不对 ajax 调用的方式进行任何更改? 这看起来很有希望..我会尝试一下,让你知道它是怎么回事..我认为它不会修改为非跨域调用进行 ajax 调用的方式 该插件对我不起作用。我无法捕获失败事件并重试。我相信这是设计使然。有什么办法可以解决这个问题? 我认为这本身就是一个 *** 问题【参考方案4】:

现在几乎现代浏览器都支持使用 CORS 协议的跨域,因此您可以使用 Ajax jQuery 来完成您的工作,而无需在脚本代码中编辑任何内容。更改在您的服务器中,您需要使用 CORS 启用您的服务器。这只是在对客户端的每个响应中添加标头字段以支持 CORS 协议的工作。在此处查看实现示例。

http://zhentao-li.blogspot.com/2013/06/example-for-enabling-cors-support-in.html

【讨论】:

以上是关于jQuery ajax 跨域调用和权限问题的主要内容,如果未能解决你的问题,请参考以下文章

JSONP详解

JSONP

Jquery $.ajax 在跨域调用的 IE 中失败

web api 跨域请求,ajax跨域调用webapi

使用 jQuery 和 AJAX 的跨域 PHP 调用

如何解决ajax跨域问题(转)