getJSON-Timeout-Behandlung

Lesezeit: 4 Minuten

Benutzeravatar von pheaselegen
phaselegen

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.

    – 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

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

    – Muhammad Omer Aslam

    27. November 2017 um 20:57 Uhr

Benutzeravatar von lethal-guitar
tödliche Gitarre

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

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

Könntest du also verwenden $.ajax() und spezifizieren die timeout Variante nach Wunsch. Siehe auch: http://api.jquery.com/jQuery.getJSON/

  • +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

Benutzeravatar von Bruno
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
    }
});

Richards Benutzeravatar
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.

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
});

Sie möchten Ihren Anruf also so tätigen:

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

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

Benutzeravatar von serraosays
serrao sagt

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

1403590cookie-checkgetJSON-Timeout-Behandlung

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy