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 跨域调用和权限问题的主要内容,如果未能解决你的问题,请参考以下文章