обрабатывать перенаправление jquery ajax - PullRequest
7 голосов
/ 26 ноября 2009

Я зарабатываю $ .get, чтобы позвонить в службу «А». Сервис «А» возвращает простой текст, который я отображаю на странице. Но иногда он перенаправляет на сервис «B», который возвращает простой текст. Но я не могу обработать текст ответа службы «B». Как мне это сделать?

Ответы [ 4 ]

5 голосов
/ 26 ноября 2009

Я не могу доказать, но я надеюсь, что этот скрипт поможет вам найти решение:

вам нужно будет подтвердить различия в статусе или текст для каждого типа ответа от "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
     }
  }

вызов функции для себя

РЕДАКТИРОВАТЬ II:

redirect.html:

<code><!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">

a.php:

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

b.php:

<?php
    print "hola mundo";

Важно: Определения кодов состояния

2 голосов
/ 12 февраля 2015

Вы не можете сделать это в JavaScript. Вы можете изменить свое поведение на стороне сервера.

Бесшумное (прозрачное) перенаправление является частью спецификации XMLHttpRequest (см. здесь особенно слова «... прозрачно следовать перенаправлению ...»). В стандарте упоминается только то, что пользовательский агент (веб-браузер) может предотвращать или уведомлять об определенных видах автоматических перенаправлений, но он не является частью XMLHttpRequest. Это часть конфигурации клиента HTTP (конфигурации ОС) или конфигурации веб-браузера

0 голосов
/ 27 ноября 2009

Какова природа Службы «А» и «В»? Более подходящим решением будет обработка несоответствия на стороне сервера. Например, если служба 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"), но это только предположение с моей стороны.

Удачи и комментируйте, если у вас есть какие-либо вопросы!

0 голосов
/ 26 ноября 2009

Если служба B ожидает в другом домене, такие междоменные вызовы AJAX запрещены, если только файл crossdomain.xml не разрешает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...