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

Schreibe einen Kommentar