AJAX Abfragen einer URL JSON Rückkehr scheint nicht frisch Antworten (mit jQuery $ Schnipsel () -Methode) zurückzukehren

StackOverflow https://stackoverflow.com/questions/1412901

Frage

Mein Projekt erfordert Abfrage eine bestimmte URL für eine JSON-Antwort, AJAX. Die erste AJAX-Anforderung, die ich machen warnt den Server, den ich einige JSON Inhalte will, und es beginnt zu bauen und Cachen eine Antwort, mich zurückzuschicken { „Status“: „pending“} für jeden nachfolgenden AJAX-Request bis die JSON ist fertig. An diesem Punkt, dass die Reaktion Änderungen JSON enthalten Inhalte, die ich in dem Dokument analysieren und anzeigen kann, die ich so bald tun will als die URL etwas anderes gibt als { „Status“: „pending“} .

Ich habe eine Abfragefunktion einrichten, die als wiederholt erwartet funktioniert JSON aus der URL anfordern. Allerdings ist das Problem, dass sie die Antwort { „Status“: „pending“} bekommen weiter , auch wenn ich die Navigation direkt auf die URL und kann sehen, dass die volle JSON-Antwort bereit ist und bedient wird . Aus irgendeinem Grund immer noch meine Abfragefunktion bekommt { "Status": "pending"}.

Wenn ich die Seite aktualisieren, die den Abrufcode enthält, es funktioniert in der Regel auf der ersten Anfrage - das heißt, es die volle JSON Antwort bekommt. Das führt mich zu glauben, dass es irgendeine Art von Caching-Problem ist, aber ich bin nicht sicher, wo und warum. Sollte nicht jeder bekommt AJAX-Anforderung eine neue Antwort, oder ist dies etwas, was ich in meinem einrichten kann $. Ajax () nennen?

Hier ist der Code, den ich jetzt mit:

function ajax_poll() {
  $.ajax({
    url: JSON_URL, // JSON_URL is a string containing the URL to poll
    dataType: 'json',
    error: function(xhr_data) {
      display_error();
    },
    success: function(xhr_data) {
      if (xhr_data.status == 'pending') {
        poll++; // increment poll counter // poll is a global variable to track the number of requests made
        if (poll < POLLS) { // POLLS is a global variable to set the maximum number of requests
          setTimeout(function() { ajax_poll(); }, INTERVAL); // wait INTERVAL before another AJAX request
        } else {
          display_error();
        }
      } else {
        success(xhr_data);
      }
    },
    contentType: 'application/json'
  });
}

Erfolg () ist die Funktion, den JSON Inhalts anzeigt (das heißt, was ich warte, während Abruf zur Verfügung zu werden) auf der Seite.

Eine Sache, erwähnenswert ist, dass während der Code lokal zu testen, Polling eine lokale .json Testdatei, kann ich den Inhalt der Datei ändern von { „Status“: „pending“} auf eine Antwort enthält, Inhalte wie ich suche, um die Datei zwischen Polling Instanzen zu speichern, und auf der nächsten Umfrage, mein Code sieht den neuen Inhalt und wie erwartet funktioniert. Es ist einfach nicht in der Staging-Umgebung arbeiten.

War es hilfreich?

Lösung

Sie können versuchen, die "cache: false" Option hinzufügen.

Andere Tipps

Nur einen möglichen Grund zu beschreiben, warum dies auftritt. Sie wahrscheinlich AJAX-Anforderungen sind die Ausstellung, aber Sie sind nicht die URL in irgendeiner Weise (keine zusätzlichen Daten in der Abfragezeichenfolge, zum Beispiel) Differenzierung

Der Browser sieht diese Anforderung und stört nicht einmal den Server mit dem vollständigen Antrag zu treffen (es wahrscheinlich gibt bedingte 304 GET-Anfragen statt). Das Endergebnis all dies ist, dass Sie nicht die Aktivität sehen Sie erwarten zu sehen.

Ein einfacher Weg, um dieses Problem zu lösen, ist nicht die Ergebnisse des AJAX-Request-Cache oder eine POST-Anforderung senden. Affecting Cache-Optionen in den anderen Beiträgen abgedeckt. Das Problem mit dem POST Ansatz ist, dass Sie nicht durch Ihre Aktionen alles speichern, und so äußern Sie Ihre Absichten besser mit einer GET-Anfrage.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top