Ich verwende jQuery getJSON() Funktion. Diese Funktion erhält problemlos Daten. Aber manchmal warten, warten, warten… Und mein Ladebalken zeigt loading loading loadin in der Mitte der Seite. Also jQuery ajax() Funktion haben eine Timeout-Variable. Aber ich möchte verwenden getJSON Funktion. Und ich denke, dass ich verwenden kann ajaxStart() und ajaxStop() Funktionen. Aber wie?
$('.loadingDiv')
.hide()
.ajaxStart(function() {
$(this).fadeIn();
setTimeout("throw '';",15000) //i used this but didn't work
setTimeout("return;",15000) //i used this but didn't work
setTimeout("abort();",15000) //i used this but didn't work.(Abort all ajax events)
})
.ajaxStop(function() {
$(this).fadeOut();
});
Wenn Sie Zeichenfolgen an übergeben setTimeout (was du solltest noch nie Tu es evals sie im globalen Geltungsbereich. Also kannst du nicht return davon.
– generisch
9. Januar 2013 um 15:28 Uhr
Sie sollten eine Zeitüberschreitung in Ihrem Aufruf von festlegen .ajax
– Asad Saeeduddin
9. Januar 2013 um 15:29 Uhr
@Asad: Das OP sagt, er möchte es verwenden $.getJSON Anstatt von $.ajax.
– generisch
9. Januar 2013 um 15:29 Uhr
Was ist falsch daran, die explizitere zu verwenden $.ajax Funktion? Es sind vielleicht mehr Codezeilen, aber es wird Sie davon abhalten, solche Probleme zu machen.
getJSON() gibt ein Versprechen zurück, auf das Sie zugreifen können abort Funktion:
var p = $.getJSON(..., function(){ alert('success');});
setTimeout(function(){ p.abort(); }, 2000);
BEARBEITEN : aber wenn Ihr Ziel nur darin besteht, abzubrechen, wenn es zu lange dauert, dann ist die Antwort von lethal-guitar besser.
+1, weil es dem OP erlaubt, es zu verwenden .getJSON statt .ajax
– renab
9. Januar 2013 um 15:40 Uhr
Ja, die wahre Antwort ist “Ajax verwenden”. Aber ich habe in meiner Frage auch geschrieben. Jedenfalls war diese Antwort hilfreich. Vielen Dank.
– phaselegen
9. Januar 2013 um 15:41 Uhr
aber das wird dem problem nicht helfen oder? die Zeit, die für die genommen wird getJSON muss gewartet werden, bis das serverseitige Skript abgeschlossen ist, und wenn dies einige Zeit in Anspruch nimmt, wird das Abbrechen der Anfrage und das Senden einer anderen das Problem nicht lösen
+1 genau das, was ich dachte (daher die Ähnlichkeit in unseren Antworten, Sie waren jedoch schneller bei der Auslosung)
– renab
9. Januar 2013 um 15:37 Uhr
Hier gibt es eine ähnliche Antwort, die erweitert werden kann, um ein Timeout für den Jquery-Ajax-Aufruf hinzuzufügen.
– shasi kanth
6. Mai 2014 um 7:19 Uhr
Bruno
Wie von Lethal-Guitar erwähnt getJSON() Funktion ist nur eine Abkürzung für $.ajax(). Wenn Sie feststellen möchten, ob ein Timeout statt eines tatsächlichen Fehlers aufgetreten ist, verwenden Sie den folgenden Code.
var request = $.ajax({
dataType: "json",
url: url,
data: data,
success: function( ) { },
timeout: 2000
}).fail( function( xhr, status ) {
if( status == "timeout" ) {
// do stuff in case of timeout
}
});
Richard
Es gibt immer auch die nukleare Route:
//Set AJAX timeout to 10 seconds
$.ajaxSetup({
timeout: 10*1000
});
Dadurch werden alle AJAX-Anforderungen Ihres Programms (auch über $.getJSON) so eingestellt, dass sie eine Zeit von 10 Sekunden (oder was auch immer) haben.
Die setTimeout-Funktion führt eine Reihe von Codes nach einer bestimmten Anzahl von Milisecons im globalen Gültigkeitsbereich aus.
Ich halte keine dieser Antworten für ideal. Ich weiß, dass dies Jahre zu spät ist, aber Sie möchten die Erfolgs-/Fehler-Callback-Optionen der verwenden .ajax(); -Methode beim Empfang einer JSONP-Antwort.
Beispiel, wie ich das strukturieren würde:
// Call
$.ajax({
// URL you want to get
url: 'http://example.com/json?callback=?',
// Set a realistic time in milliseconds
timeout: 3000,
// Put in success callback function here, this example
// shows you the data you got back from the call
success: function(data) {
console.log(data);
},
// Put in an error handling function, just an alert in this case
error: function(badData) {
alert('The call was unsuccessful');
},
type: 'POST'
});
Wenn Sie Zeichenfolgen an übergeben
setTimeout
(was du solltest noch nie Tu eseval
s sie im globalen Geltungsbereich. Also kannst du nichtreturn
davon.– generisch
9. Januar 2013 um 15:28 Uhr
Sie sollten eine Zeitüberschreitung in Ihrem Aufruf von festlegen
.ajax
– Asad Saeeduddin
9. Januar 2013 um 15:29 Uhr
@Asad: Das OP sagt, er möchte es verwenden
$.getJSON
Anstatt von$.ajax
.– generisch
9. Januar 2013 um 15:29 Uhr
Was ist falsch daran, die explizitere zu verwenden
$.ajax
Funktion? Es sind vielleicht mehr Codezeilen, aber es wird Sie davon abhalten, solche Probleme zu machen.– generisch
9. Januar 2013 um 15:31 Uhr
@RocketHazmat:
$.getJSON
ist nur ein Wrapper für$.ajax
. Siehe Handbuch: api.jquery.com/jQuery.getJSON– tödliche Gitarre
9. Januar 2013 um 15:31 Uhr