2015-04-02 17 views
14

ho questo tipo di javascript:Come gestire Net :: ERR_CONNECTION_REFUSED in jquery ajax

$.ajax({ 
    url: "//myapi.com/json", 
    dataType: "jsonp" 
}).done(function (data) { 
    selectText('Id', data.country); 
}).fail(function (jqXHR, textStatus, errorThrown) { 
    var defaultOption = 'US' 
    selectDropdownByText('Id', defaultOption); 

    console.log(errorThrown); 
}); 

ma la cosa è che in https ricerca Il mio Ajax non sta funzionando perché il servizio che chiamo non è accessibile tramite https e sto ricevendo l'errore :ERR_CONNECTION_REFUSED - quindi va bene, voglio solo gestirlo. Ho .fail in una chiamata Ajax, ma non gestisce :ERR_CONNECTION_REFUSED Potresti dare consigli su come gestire :ERR_CONNECTION_REFUSED in questo caso?

Stavo anche cercando di avvolgere la mia chiamata ajax al blocco try-catch, ma non funzionava neanche.

+0

hai provato la proprietà .error invece di .fail? –

+0

Provare a utilizzare la proprietà 'timeout' nelle opzioni ajax per attivare la richiamata di errore – mohamedrias

+0

@RickHoving yes I did. '.error' non sta sparando per quel caso. – sreginogemoh

risposta

6

È possibile utilizzare la proprietà timeout di $.ajax per attivare la richiamata error.

In questo modo verrà attivato il callback error se il server non risponde entro un determinato limite di tempo.

$.ajax({ 
    url: "//myapi.com/json", 
    dataType: "jsonp", 
    timeout: 15000 // adjust the limit. currently its 15 seconds 
}).done(function (data) { 
    selectText('Id', data.country); 
}).fail(function (jqXHR, textStatus, errorThrown) { 
    var defaultOption = 'US' 
    selectDropdownByText('Id', defaultOption); 

    console.log(errorThrown); 
}); 

Questo attiverà la fail callback quando non c'è internet pure.

+0

Quindi non c'è un altro modo per aggirare? Hai qualche idea sul perché "try-cath" non stia gestendo quell'erorismo? 'prova {$ .ajax ({...});} catch (ex) {}' – sreginogemoh

+0

Posso confermare che non c'è modo di intercettare questo tipo di problema senza impostare esplicitamente l'attributo timeout. un altro modo può essere quello di controllare il valore dei dati nel gestore di successo, e se è vuoto fare qualcosa di simile al gestore degli errori: http://stackoverflow.com/a/6792515/615924 – rikpg

+1

Nel mio caso l'impostazione del timeout risulta ancora in ' net :: ERR_CONNECTION_REFUSED' e 'fail' non sono in esecuzione. C'è qualche altra condizione che deve essere soddisfatta? – dlsso

0

Quindi, fail viene chiamato se otteniamo un ERR_CONNECTION_REFUSED, ma non c'è modo di vedere effettivamente perché viene chiamato fail. C'è un modo per rilevare all'interno del metodo fallito perché le cose falliscono? cioè timeout vs connessione rifiutata? C'è una differenza tra i due. Uno che potrei riprovare, l'altro non fa differenza.

Non è necessario impostare il timeout per gestire errori di connessione rifiutati.

+0

Se "non riesci" per un timeout, il parametro "errore" della funzione sarà "timeout" e non "errore" – Claudio

1

Sembra che quando jqXHR.readyState (vale a dire, il campo readyState del primo parametro per il metodo $ .ajax (...). Fail()) sia 0 che si sia verificato un errore di rete. Tuttavia, non sono stato in grado di accertare quale sia l'errore di rete esatto tramite JavaScript.

Ho esaminato il codice jQuery Ajax e xhr.send() (cioè, il metodo XMLHttpRequest.send()) (che genera l'errore di rete) non rileva né genera l'errore. Quindi, non è possibile prenderlo.

Sembra che il browser rilevi e visualizzi il messaggio di errore corretto ma che jQuery non si accorga del tipo specifico di errore di rete che si verifica.