it-swarm.com.de

getJSON Timeout-Behandlung

Ich verwende die jQuery-Funktion getJSON(). Diese Funktion liefert Daten ohne Probleme. Aber manchmal warten, warten, warten ... Und meine Ladebalken zeigen an, dass das Laden des Ladevorgangs in der Mitte der Seite angezeigt wird. Die Funktion jQuery ajax() hat also eine Timeout-Variable. Aber ich möchte getJSON Funktion verwenden. Und ich denke, dass ich ajaxStart()- und ajaxStop()-Funktionen verwenden kann. 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();
    });
19
pheaselegen

getJSON() gibt ein Versprechen zurück, mit dem Sie die abort-Funktion aufrufen können: 

var p = $.getJSON(..., function(){ alert('success');});
setTimeout(function(){ p.abort(); }, 2000);

BEARBEITEN: Aber wenn es nur Ihr Ziel ist, abzubrechen, wenn es zu lange dauert, ist die Antwort auf die tödliche Gitarre besser.

15
Denys Séguret

getJSON() ist nur eine Abkürzung für Folgendes:

$.ajax({
    dataType: "json",
    url: url,
    data: data,
    success: success
});

Sie können also $.ajax() verwenden und die Option timeout nach Wunsch angeben. Siehe auch: http://api.jquery.com/jQuery.getJSON/

15
lethal-guitar

Wie die tödliche Gitarre erwähnt, ist getJSON() 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
    }
});
10
Bruno

Es gibt immer auch die Nuklearstraße:

//Set AJAX timeout to 10 seconds
$.ajaxSetup({
  timeout: 10*1000
});

Dadurch werden alle AJAX -Anforderungen Ihres Programms (auch über $ .getJSON) auf eine Zeit von 10 Sekunden (oder was auch immer Sie) eingestellt.

3
Richard

die Funktion setTimeout führt eine Reihe von Code nach einer angegebenen Anzahl von Millisekunden im globalen Bereich aus.

Die getJSON-Funktion (gemäß der jQuery-Dokumentation hier http://api.jquery.com/jQuery.getJSON/ ) ist eine Abkürzung für:

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

so möchten sie ihren anruf so machen:

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success,
  timeout: 15000
});

$('.loadingDiv')
    .hide()
    .ajaxStart(function() {
        $(this).fadeIn();
    })
    .ajaxStop(function() {
        $(this).fadeOut();
    });
1
renab

Ich denke nicht, dass eine dieser Antworten ideal ist. Ich weiß, dass dies um Jahre zu spät ist, aber Sie möchten die Erfolgs-/Fehler-Callback-Optionen der .ajax();-Methode verwenden, wenn Sie eine JSONP-Antwort erhalten.

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'
    });
0
staypuftman