jQuery's ajaxSetup - Ich möchte nur Standarddaten für GET-Anfragen hinzufügen
In eine ajax-getriebene Seite, die ich Hinzugefügt haben, einige Standard-Daten mit Hilfe der ajaxSetup, ala:
var revision = '159';
$.ajaxSetup({
dataType: "text json",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
data: {
r: revision
}
});
Dies ist, um sicherzustellen cache-miss, wenn eine neue Version bereitgestellt wird und der frontend-Fragen für html-templates oder json-Daten aus dem backend. Das backend und frontend zu teilen die gleiche Revisionsnummer aus diesem Grund.
Das problem ist, dass das backend etwas unglücklich über den parameter 'r', wenn das frontend hat eine PUT, POST oder DELETE. Gibt es keine Möglichkeit zu sagen, jQuery ajax, dass diese Daten sollten nur verwendet werden, wenn dabei HOLEN Sie Anfragen und nicht, wenn Sie POST -, PUT-oder DELETE-Anfragen.
UPDATE:
Ich habe versucht, die beforeSend Funktion Erster, da wusste ich es. Jedoch ändern von Einstellungen.Daten möglich war, aber jede änderung schien zu verschwinden, wenn beforeSend zurückgegeben. Es mag mein Fehler sein... 🙂
Ich haben sich auf die ajaxPreFilter statt. Es war nicht einfach, da die Torte, wenn. Die Optionen.Daten ist nicht ein Objekt, sondern das Ergebnis von $.param(Objekt), also die erste Herausforderung war die un-parametrisieren. Ich landete mit diesem:
var revision = '159';
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
//do not send data for POST/PUT/DELETE
if (originalOptions.type !== 'GET' || options.type !== 'GET') {
return;
}
var data = originalOptions.data;
if (originalOptions.data !== undefined) {
if (Object.prototype.toString.call(originalOptions.data) === '[object String]') {
data = $.deparam(originalOptions.data); //see http://benalman.com/code/projects/jquery-bbq/examples/deparam/
}
} else {
data = {};
}
options.data = $.param($.extend(data, { r: revision }));
});
InformationsquelleAutor der Frage CodeReaper | 2011-08-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ab jQuery 1.5, können Sie umgehen, so viel mehr aus über Prefilters:
InformationsquelleAutor der Antwort Mrchief
Ich denke, was Sie vielleicht in der Lage sein zu verwenden, ist
beforeSend
.jqXHR Dokumentation
BeforeSend Dokumentation sowie Ihre Einstellungen zur Verfügung
Codiert ich diese blind, so hoffe ich, es wird Sie in die richtige Richtung gehen.
InformationsquelleAutor der Antwort Adam Terlson