2011-09-16 21 views
6

Tengo una función de publicación que no se detecta por error.Jquery Ajax función de éxito/error de publicación

Aquí está el valor devuelto por postride.php.

if ($group_id==0) { 
echo 'No group selected'; 
return false; 
exit; 
} 

Aquí está el código jQuery:

$(document).ready(function(){ 
$('#postride').submit(function(event) { 
    event.preventDefault(); 
    dataString = $("#postride").serialize(); 
    $.ajax({ 
     type: "post", 
     url: "postride.php", 
     data:dataString, 
     error: function(returnval) { 
      $(".message").text(returnval + " failure"); 
      $(".message").fadeIn("slow"); 
      $(".message").delay(2000).fadeOut(1000); 
     }, 
     success: function (returnval) { 
      $(".message").text(returnval + " success"); 
      $(".message").fadeIn("slow"); 
      $(".message").delay(2000).fadeOut(1000);  
      //setTimeout(function() { top.location.href="view.php" }, 3000); 
     } 
    }) 
    return false; 
}); 

});

La función de publicación devuelve falso, pero la función de error no se activa, solo la función de éxito. Publicará "Sin éxito seleccionado de grupo".

¡Gracias por cualquier ayuda!

Respuesta

21

La opción de error en los métodos jQuery ajax es para los errores causados ​​por una mala conexión, tiempo de espera, url no válido, cosas de esa naturaleza. No es el tipo de error que estás pensando.

lo que mucha gente es algo como esto ...

php

if ($group_id == 0) { 
echo json_encode(array(
    'status' => 'error', 
    'message'=> 'error message' 
)); 
} 
else 
{ 
echo json_encode(array(
    'status' => 'success', 
    'message'=> 'success message' 
)); 
} 

Javascript

$(document).ready(function(){ 
$('#postride').submit(function(event) { 
    event.preventDefault(); 
    dataString = $("#postride").serialize(); 
    $.ajax({ 
     type: "post", 
     url: "postride.php", 
     dataType:"json", 
     data: dataString, 
     success: function (response) { 
      if(response.status === "success") { 
       // do something with response.message or whatever other data on success 
      } else if(response.status === "error") { 
       // do something with response.message or whatever other data on error 
      } 
     } 
    }) 
    return false; 
}); 
+0

muchas gracias por la aclaración ! – Matt

+0

De nada Matt –

+0

Nice, @AnthonyJack! Pero creo que te refieres a 'dataType: 'json'' en el código de JavaScript ... – Simon

0

El método error de la función ajax de jQuery solo se ejecutará cuando la página solicitada devuelva un código de estado de error. Su ejemplo probablemente devolverá HTTP 200, por lo que se llama a success; jQuery no cuestiona el contenido de una respuesta para determinar si fue o no exitosa.

deberá ajustar un 4xx status code$group_id cuando es 0, mediante la sustitución de su llamada echo con una llamada a header.

2

wsanville es correcta: "éxito" o "fracaso" se refiere al éxito/fracaso de la solicitud de Ajax.

En lugar de cambiar el encabezado HTTP, me parece útil devolver información en una respuesta json. Así, por ejemplo, tendría postride.php responder de esta manera:

$error = false; 
if ($group_id==0) { 
    $error = 'No group selected'; 
} 
$response = array('error'=>$error); 
echo json_encode($response); 

Luego, en la devolución de llamada "éxito" de la JS, Me gustaría hacer esto:

success: function (returnval) { 
    if (returnval.error) { 
     $(".message").text(returnval + " failure") 
     .fadeIn("slow",function(){ 
      $(this).delay(2000).fadeOut(1000); 
     }); 
    } else { 
     //do whatever user should see for succcess 
    } 
+0

Anthony Jack publicó casi todo lo que iba a decir primero - si votaste mi respuesta, deberías votar por él y aceptar la suya en lugar de la mía. –

Cuestiones relacionadas