处理jquery ajax重定向
我正在拨打$ .get来拨打服务’A’。 服务’A’返回我在页面上显示的纯文本。 但有时它会重定向到服务’B’,返回纯文本。 但是,我无法处理服务’B’的响应文本。 我怎么做?
我无法certificate,但我希望这个脚本可以指导您找到解决方案:
您必须certificate您的状态差异或来自“a.php”的每种响应类型的文本
$.ajax({ type: "GET", url: "a.php", complete: function (XMLHttpRequest, textStatus) { if (XMLHttpRequest.status!=200) // or responseText { var fn = arguments.callee; var _this = this; setTimeout(function(){fn.call(_this, XMLHttpRequest, textStatus);}, 200); } else { //ok } } });
或编辑:
complete: function xCompleteFunction(XMLHttpRequest, textStatus) { if (XMLHttpRequest.status!=200) // or responseText { var _this = this; setTimeout(function(){xCompleteFunction.call(_this, XMLHttpRequest, textStatus);}, 200); } else { //ok } }
函数调用自身
编辑二:
将redirect.html:
a.php只会:
b.php:
重要: 状态代码定义
你不能在javascript中这样做。 您可以更改服务器端行为。
静默(透明)重定向是XMLHttpRequest规范的一部分(请参阅此处特别是“……透明地遵循重定向…”)。 标准仅提到用户代理(Web浏览器)可以阻止或通知某些类型的自动重定向,但它不是XMLHttpRequest的一部分。 它是HTTP客户端配置(操作系统配置)或Web浏览器配置的一部分
如果服务B正在侦听不同的域,则禁止此类跨域AJAX调用,除非有crossdomain.xml文件允许它。
服务’A’和’B’的本质是什么? 一个更简洁的解决方案是处理服务器端的差异。 例如,如果服务A是PHP脚本……
或者,如果这些服务是文本文件,您可以使用第三个文件来做出决定,并包括服务A或B。 例如,这可能是ajax.php,你可以在所有情况下调用ajax.php:
从它的声音来看,你的条件将是file_exists("a.txt")
,但这只是我的猜测。
祝你好运,如果你有任何问题请评论!