处理jquery ajax重定向

时间:2009-11-26 17:39:13

标签: jquery ajax redirect

我正在拨打$ .get来调用服务'A'。服务'A'返回我在页面上显示的纯文本。但有时它会重定向到服务'B',返回纯文本。但是,我无法处理服务'B'的响应文本。我该怎么做?

4 个答案:

答案 0 :(得分:5)

我无法证明,但我希望此脚本可以指导您找到解决方案:

您必须在“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
     }
  }

function call to itself

编辑II:

将redirect.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<title></title>
<script type="text/javascript">
$(function(){
    $("#senddata").click(function(){
        $.ajax({
            type: "GET",
            url: "a.php",
            complete: function xCompleteFunction(XMLHttpRequest, textStatus) {
                $("#info").append(""+XMLHttpRequest.status+"<br />"+XMLHttpRequest.responseText+"<br>");
                if (XMLHttpRequest.status==301) // or responseText 
                { 
                    var _this = this;
                    setTimeout(function(){xCompleteFunction.call(_this, XMLHttpRequest, textStatus);}, 200);
                    $("#info").append("waiting redirect<br>");
                }
                else
                {
                    $("#info").append("redirect ok<br>");
                }
            }
        });
    });
});
</script>
</head>
<body>
<button id="senddata">send ajax request</button>
<pre id="info"></pre>
</body>
</html>

a.php只会:

<?php
for($a=0;$a<1000000;$a++)
{
    //wait
}
header('Location: b.php');

b.php:

<?php
    print "hola mundo";

重要提示: Status Code Definitions

答案 1 :(得分:2)

无法在javascript中执行此操作。您可以更改服务器端行为。

静默(透明)重定向是XMLHttpRequest规范的一部分(请参阅here,尤其是“......透明地遵循重定向......”)。标准仅提到用户代理(Web浏览器)可以阻止或通知某些类型的自动重定向,但它不是XMLHttpRequest的一部分。它是HTTP客户端配置(操作系统配置)或Web浏览器配置

的一部分

答案 2 :(得分:0)

如果服务B正在不同的域中侦听,则禁止进行此类跨域AJAX调用,除非有crossdomain.xml文件允许它。

答案 3 :(得分:0)

服务'A'和'B'的性质是什么?一个更简洁的解决方案是处理服务器端的差异。例如,如果服务A是PHP脚本......

<?php

if(prerequisite for display service A plain text){

    echo "service a plain text";

}else{

    echo "service b plaint text";

}

?>

或者,如果这些服务是文本文件,您可以使用第三个文件做出决定,并包含服务A或B。例如,这可能是ajax.php,你可以在所有情况下调用ajax.php:

<?php

if(prerequisite for displaying service A plain text){

    echo file_get_contents("a.txt");

}else{

    echo file_get_contents("b.txt");

}

?>

听起来,你的条件是file_exists("a.txt"),但这只是我的猜测。

祝您好运,如果您有任何疑问,请发表评论!