Estoy haciendo un $ .get para llamar a un servicio 'A'. El servicio 'A' devuelve texto sin formato que se muestra en la página. Pero a veces redirige al servicio 'B' que devuelve texto sin formato. Pero no puedo manejar el texto de respuesta del servicio 'B'. ¿Cómo puedo hacer eso?manejar jquery ajax redirigir
Respuesta
Si el servicio B está escuchando en un dominio diferente, entonces tales llamadas AJAX de dominio cruzado están prohibidas, a menos que exista un archivo crossdomain.xml que lo permita.
no puedo probarlo, pero espero que esta secuencia de comandos que puede guiar a una solución:
que tendría que demostrar sus diferencias de estatus o texto en cada tipo de respuesta por parte de "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
}
}
});
o editar:
complete: function xCompleteFunction(XMLHttpRequest, textStatus) {
if (XMLHttpRequest.status!=200) // or responseText
{
var _this = this;
setTimeout(function(){xCompleteFunction.call(_this, XMLHttpRequest, textStatus);}, 200);
}
else
{
//ok
}
}
EDITAR 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";
Importante:Status Code Definitions
intenté copiar esto y usar pero no pareció funcionar. No puedo entender mucho. ¿podría explicar este código? soy completamente nuevo en javascript. – akula1001
¿Cuál es la naturaleza del servicio 'A' y 'B'? Una solución más ordenada sería manejar la discrepancia en el lado del servidor. Por ejemplo, si un servicio es un script PHP ...
<?php
if(prerequisite for display service A plain text){
echo "service a plain text";
}else{
echo "service b plaint text";
}
?>
Alternativamente, si estos servicios son archivos de texto, usted podría tener un tercer archivo que toma la decisión, e incluye servicio A o B dependiendo. Por ejemplo, esto podría ser ajax.php, y se llamaría ajax.php en todos los casos:
<?php
if(prerequisite for displaying service A plain text){
echo file_get_contents("a.txt");
}else{
echo file_get_contents("b.txt");
}
?>
De lo que suena, el condicional habrá file_exists("a.txt")
, pero eso es sólo una conjetura de mi parte.
¡Buena suerte y comente si tiene alguna pregunta!
no, así no es como funciona. la aplicación está integrada con CAS, por lo que una solicitud de 'A' provoca una redirección a CAS que se autentica y luego hace otra redirección a 'A'. puedo ver los redireccionamientos usando firebug pero no en el controlador en jquery. – akula1001
Usted no puede hacer esto en javascript. Puede cambiar su comportamiento del lado del servidor.
La redirección silenciosa (transparente) es la parte de la especificación XMLHttpRequest (consulte here especialmente las palabras "... sigue de forma transparente la redirección ..."). La mención estándar solo menciona que el agente de usuario (el navegador web) puede evitar o notificar ciertos tipos de redirecciones automáticas, pero no es parte de XMLHttpRequest. Es la parte de la configuración del cliente HTTP (configuración del sistema operativo) o la configuración del navegador web
- 1. Redirigir en Ajax Jquery Llamar
- 2. jQuery - redirigir después de la llamada ajax
- 3. Cómo manejar código de estado 307 redirigir con jquery
- 4. jQuery Ajax: redirigir a otras páginas sin esperar el resultado
- 5. jQuery AJAX ver redirigir como estado 200 no 302?
- 6. jQuery y data-attributes para manejar todas las llamadas ajax?
- 7. 301 redirigir a AJAX - redirigido?
- 8. Redirigir usando jQuery
- 9. Redirigir desde una publicación de formulario Ajax
- 10. Enviar un formulario sin actualizar/redirigir de la página actual (Python (Django) + jQuery + Ajax)
- 11. jQuery: catch ajax excepciones
- 12. Jquery $ .ajax statusCode Else
- 13. ASP.NET MVC AJAX con jQuery
- 14. jQuery Ajax Solicitud dentro de Ajax Solicitud
- 15. jQuery Ajax POST ejemplo con PHP
- 16. jQuery ajax() opción - xhr
- 17. AJAX/jQuery XML analizan
- 18. JQuery Adjuntar AJAX
- 19. jQuery ajax image upload
- 20. jQuery: evento ajax
- 21. jQuery AJAX Success
- 22. Jquery Ajax Thumbs gallery
- 23. jQuery $ .ajax y readyStates
- 24. JQuery AJAX sintaxis
- 25. jQuery AJAX Encabezado personalizado
- 26. predeterminado jQuery Ajax statusCode
- 27. jquery ajax() asíncrono falsa
- 28. jQuery Ajax checkbox state
- 29. jquery $ .ajax jsonp
- 30. jQuery AJAX vs. UpdatePanel
estoy usando jsonp para realizar llamadas de dominio cruzado (de hecho, 'A' y 'B' devuelven el texto json). .. y 'A' también está en un dominio diferente. – akula1001
Hmm.¿Has intentado rastrear las solicitudes desde el navegador? – PanJanek