2011-12-14 20 views
10
codice

JavaScript, utilizzando jQuery 1.7:jQuery ajax callback mai chiamato

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

Con Firebug posso vedere che la richiesta GET HTTP viene inviato e un "ciao mondo" di risposta con il codice 200 viene restituito, quindi tutto sembra bene. Ma il callback non viene mai chiamato.

Non ho idea di cosa sia sbagliato; questo dovrebbe essere così semplice, giusto?

+7

'$ .get()' fallirà silenziosamente. Passa a usare '$ .ajax()' con un metodo 'error' e controlla se viene eseguito. Se lo fa, dai un'occhiata agli argomenti dati per vedere cosa non va. – JAAulde

+1

Che tipo di contenuto torna dal gestore di ajax? Se è JSON e la risposta ha un JSON non valido può fallire senza darti una chiara ragione per cui. –

+0

A colpo d'occhio, ti manca un ';' alla fine della dichiarazione get? – brheal

risposta

8

Non stai fornendo dataType così jQuery fa una "congettura intelligente" di ciò che il tipo di contenuto è dalla risposta Content-Type intestazione che hai detto è application/json.

Quindi jQuery considera la risposta come JSON, il che significa che proverà ad analizzarlo automagicamente in questo modo, causando un errore.

Poiché la richiesta provoca un errore

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

il callback successo non sarà ovviamente licenziato.

0

aggiungere questo markup

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

quindi aggiungere questo gestore per la cattura di AJAX errori

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

In alternativa, si potrebbe riscrivere il codice originale come questo

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

dare a questo un rip :

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

Questo perché in base alla documentazione la sintassi $ .get() dovrebbe essere così si prega di notare l'opzione di callback

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

"successo". una chiamata di successo chiamata quando la richiesta è riuscita in base ai codici di stato (200). ma l'url potrebbe non essere un percorso valido o restituire un altro codice di stato (404) che significa "file non trovato" e quindi si verifica un errore. così il metodo di successo non ha mai chiamato.

inoltre non vi è alcun callback di "errore" definito con la sintassi. controllare il seguente codice più completo

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