2012-05-02 26 views
9

Tengo un problema con una función de devolución de llamada simple en jQuery ajax. Google no ayudará y el desbordamiento de la pila tampoco lo haría, así que supongo que esto podría no ser algo específico sino más bien algo que soy demasiado ignorante para ver. Para mí, el código se ve exactamente como debería.¿Por qué la función de devolución de llamada jquery ajax no funciona?

lo tanto, aquí está el código:

function sendMessage(message) 
{ 
//Establish connection to php script 
$.ajax({ 
    type: 'POST', 
    url: 'action/chat/test.php', 
    success: function(feedback){ 

     alert(feedback); 

    } 
}).error(function(){ 
    //Do some error handling here 
}); 
} 

En prueba.php simplemente dice

<?php 
    echo "called"; 
?> 

En lo que a mí respecta "llamada" deberá ser advertido - pero no lo es. Ya he comprobado que se llama a la función sendMessage() (y el mensaje de parámetro no importa por ahora).

¿Alguien tiene alguna idea?

+0

¿Tiene algún error de secuencia de comandos? revisa la consola Firebug. – Shyju

+0

Si coloca una alerta al comienzo de 'sendMessage()', ¿se muestra? – jfriend00

+0

Las dos opciones más probables: errores de Javascript que provocan que no se envíe la solicitud AJAX, o un problema con la solicitud AJAX que significa que se ejecuta la función de devolución de llamada 'error', en lugar de' éxito'. Usar su depurador de navegadores sería un buen primer paso. –

Respuesta

14

Actualización: Una cosa a tener en cuenta también, asegúrese de utilizar algún tipo de depurador como firebug. Luego puede ir a la pestaña de red y ver la url de solicitud y responder manualmente para ver si recibe una respuesta 200 o un error interno del servidor, etc.

Pruebe agregar console.log(data); en su función de éxito para ver si se está procesando algo devuelto.

Usted podría también utilizar .always(data):

function sendMessage(message) 
{ 
    //Establish connection to php script 
    $.ajax({ 
     type: 'POST', 
     url: 'action/chat/test.php' 
    }).done(function(data) { console.log(data); }) 
    .fail(function() { alert("error"); }) 
    .always(function() { alert("complete"); }); 
} 

A partir de los documentos:

Aviso Deprecation: El jqXHR.success(), jqXHR.error(), y jqXHR.complete() devoluciones de llamada quedará obsoleto en jQuery 1.8. Para preparar su código para su eventual eliminación, use jqXHR.done(), jqXHR.fail() y jqXHR.always() en su lugar.

+2

¡He encontrado el problema! Hubo algún problema con el acceso a archivos de mi apache. A Apache no se le permitió leer el archivo, aunque acabo de crearlo con Coda como suelo hacerlo. Ahora funciona la devolución de llamada. Acabo de unirme al desbordamiento de pila y tengo que decir que estoy abrumado con todas las respuestas rápidas. ¡Gracias! – weltschmerz

+0

Una cosa a tener en cuenta también, asegúrese de utilizar algún tipo de depurador como firebug. Luego, puede ir a la pestaña de red y mirar la url de solicitud y responder manualmente para ver si recibe una respuesta 200 o un error interno del servidor, etc. – Fostah

+0

¡gracias! lo que necesitaba – weltschmerz

1

Probablemente sea el manejo de errores. Si desea manejar los errores, hay otro atributo que puede asignar al objeto que pasa a ajax, es "error" y también "tiempo de espera" para manejar el tiempo de espera de la página. Busque la función $ .ajax y encontrará estos atributos.

+0

Cuando traté de usar el manejo de errores antes con una alerta, no alertó nada. Ahora lo hace. Parece que hay algo mal con el archivo php, aunque la ruta es correcta. – weltschmerz

+1

¡He encontrado el problema! Hubo algún problema con el acceso a archivos de mi apache. A Apache no se le permitió leer el archivo, aunque acabo de crearlo con Coda como suelo hacerlo. Ahora funciona la devolución de llamada. Acabo de unirme al desbordamiento de pila y tengo que decir que estoy abrumado con todas las respuestas rápidas. ¡Gracias! – weltschmerz

4

Solo como referencia, hay un comportamiento que puede terminar así (es decir, hecho() no llamado).

Aquí está:

  1. Supongamos que espera un objeto JSON (que preguntó por él con el "Aceptar" tipo MIME).
  2. Supongamos que la cadena Json no es válida.

En este caso done() nunca se invoca, pero siempre() será. Y en always() obtendrá la respuesta formateada "mal" como texto puro.

Cuestiones relacionadas