4 Stimmen

Wie man ein Objekt zu jQuery ajax beforeSend's settings.data hinzufügt

Ich bin die Bindung an die beforeSend's Ajax-Formular Übermittlung:

Meine Funktion sieht so aus:

submitStuff : function(e, xhr, settings) {

    settings.data = {
            invitation : {
                emails : me.returnsArrayX(),
                bucket2 : me.returnsArrayY(),
                bucket3 : me.returnsArrayZ()
            }
    }

}

Dies funktionierte, als ich die Daten manuell an den Server übermittelte, etwa so:

    $.ajax({
        type: 'POST',
        url: '/myurl',
        dataType: 'json',
        data: {
            invitation : {
                emails : me.returnsArrayX(),
                bucket2 : me.returnsArrayY(),
                bucket3 : me.returnsArrayZ()
            }
        }
    });

Aber da ich Rails UJS verwende, möchte ich das eingebaute Formular Submitter (data-remote) verwenden. Warum würde settings.data nicht in der oben genannten funktionieren? Muss ich das Objekt in ein Array oder etwas anderes konvertieren?

Danke

3voto

Esailija Punkte 134081

Satz processData a false können Sie einfach mit einem Objekt in der beforeSend :

$.ajax("/", {
    beforeSend: function(xhr, settings) {
        settings.data.key2 = "value2";
        settings.data.key3 = {
             more: "values",
             like: "this"
        }; 

        //Encode at end
        settings.data = jQuery.param(settings.data, false);
    },
    data: {
        key: "value"
    },
    processData: false,
    type: "POST"
});

1voto

pdpMathi Punkte 777

Versuchen Sie dies

submitStuff : function(e, xhr, settings) {

  settings.data += "&serialized=data";

}

ähnlichen Beitrag: Wie kann ich Daten an eine jquery-ujs-Post-Anfrage in Rails anhängen?

1voto

Matt R. Punkte 2019

Für die Serialisierung der Daten würde ich verwenden jQuery.param(obj) . Nach dem Beispiel von pdpMathi würde es also etwa so aussehen.

submitStuff : function(e, xhr, settings) {

    data = {
            invitation : {
                emails : me.returnsArrayX(),
                bucket2 : me.returnsArrayY(),
                bucket3 : me.returnsArrayZ()
            }
    }
    settings.data += "&serialized=" + jQuery.param(data)

}

Sie können die oben genannten Funktionen anhand einiger einfacher Beispieldaten hier sehen jsFiddle . So können Sie Ihre Daten einfach bearbeiten und erst dann serialisieren, wenn sie fertig sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X