2011-12-14 24 views
10
código

Javascript, usando jQuery 1.7:jQuery Ajax de devolución de llamada nunca llamó

$(function() { 
    $.get('/ajax_dummy', function() { alert('foo'); }) 
}); 

Con Firebug puedo ver que la solicitud GET HTTP se envía y se devuelve un "hola mundo" respuesta con código 200, por lo que todo parece multa. Pero la devolución de llamada nunca se llama.

No tengo idea de lo que está mal; esto debería ser tan simple, ¿verdad?

+7

'$ .get()' fallará silenciosamente. Cambie a usar '$ .ajax()' con un método 'error' y vea si eso se ejecuta en su lugar. Si lo hace, eche un vistazo a los argumentos dados para ver qué está pasando mal. – JAAulde

+1

¿Qué tipo de contenido proviene del manejador ajax? Si es JSON y la respuesta tiene un formato incorrecto de JSON, puede fallar sin darle una razón clara de por qué. –

+0

A simple vista, ¿te falta un ';' al final de la declaración get? – brheal

Respuesta

8

No está proporcionando dataType por lo que jQuery hace una "suposición inteligente" de lo que es el tipo de contenido de la respuesta Content-Type encabezado que dijiste es application/json.

Así que jQuery trata la respuesta como JSON, lo que significa que intentará analizar automáticamente como tal, causando un error.

Debido a la solicitud produce un error

$.parseJSON("hello world"); 
"Invalid JSON: hello world" 

no será, obviamente, ser despedido de la devolución de llamada de éxito.

0

agregar este marcado

<div id="error"></div> 

continuación, agregue este controlador para detectar errores de AJAX

$("#error").ajaxError(function(event, request, settings){ 
    $(this).append("<li>Error requesting page " + settings.url + "</li>"); 
}); 

Como alternativa, puede reescribir su código original como esto

$.get('/ajax_dummy', function() { 
    alert('foo'); 
}).error(function() { 
    // catch error 
}); 
5

dar a esto una estafa :

$.ajax("/ajax_dummy", { 
    dataType: "text", 
    success: function() { 
     console.log("winning."); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log(textStatus); //error logging 
    } 
}); 
0

Esto se debe a que, según la documentación de la sintaxis $ .get() debería ser así, tenga en cuenta la opción de devolución de llamada

jQuery.get(url [, data] [, success(data, textStatus, jqXHR)] [, dataType]) 

"éxito". una devolución de llamada de éxito llamada cuando la solicitud es exitosa en función de los códigos de estado (200). pero su URL podría no ser una ruta válida o devolver algún otro código de estado (404) que significa "archivo no encontrado" y, por lo tanto, se produce un error. entonces el método de éxito nunca fue llamado.

tampoco hay una devolución de llamada de "error" definida con su sintaxis. compruebe el siguiente código más completo

$.get("/ajax_dummy", function() { alert('foo'); }) 
    .error(function(d,e) { alert(e); }) 
    .complete(function() { alert("complete"); }); 
Cuestiones relacionadas