2015-09-24 15 views
5

Ich weiß, wie einige Parameter zu einer JQuery $ .getJSON Callback-Methode, thanks to this question weitergeben müssen:

$.getJSON('/website/json', 
{ 
    action: "read", 
    record: "1" 
}, 
function(data) { 
    // do something 
}); 

Und ich auch ein Formular zu einer $ .getJSON Callback-Methode einreichen:

$.getJSON('/website/json', $(formName) 
function(data) { 
    // do something 
}); 

Aber Ich möchte einige Parameter übergeben und einige Formularelemente einreichen. Wie kann ich die beiden Dinge miteinander verbinden?

Ich konnte die Formularelemente serialisiert und manuell einige Parameter an die URL hinzufügen, und es sieht aus wie es funktioniert:

$.getJSON('/website/json', 
    'action=read&record=1&' 
    + $(formName).serialize(), 
function(data) { 
    // do something 
}); 

Aber es sieht nicht sehr elegant. Ist das der richtige Weg, oder gibt es einen besseren Weg?

+0

Sie können sie passieren mag: '$ .getJSON ('/ Website/json', {Aktion: "lesen", Rekord: 1, ..}.' - nicht sicher, was sonst ya tun können – tymeJV

+0

warum Nicht nur die Parameter, die Sie übergeben wollen, sind Teil des Formularelements, vielleicht als versteckte Eingabeelemente? –

Antwort

2

Wir könnten die Funktionalität demonstrated in this answer als benutzerdefinierte jQuery Instanzmethode implementieren, die sich von einer Form, um ein Objekt von Schlüssel/Wert-Paare erzeugt und kombiniert sie mit den Eigenschaften, die nicht von der Form ableiten:

$.fn.formObject = function (obj) { 
    obj = obj || {}; 
    $.each(this.serializeArray(), function (_, kv) { 
     obj[kv.name] = kv.value; 
    }); 
    return obj; 
}; 

$.getJSON('/website/json', $(formName).formObject({ 
    action: "read", 
    record: "1" 
}), function(data) { 
    // do something 
}); 
+1

Ich musste ein 'return obj;' nach '$ .each' hinzufügen und es funktioniert. Interessante Lösung – fthiella

0

Erstellen Sie einen Ajax-Post, um die Daten an den Server zu senden. Rufen Sie die Parameterdaten im Backend-Code zusammen mit den Formulardaten ab.

var formData = {data from form}; 

formData.action = 'read'; 
formData.post = '1'; 

$.ajax({ 
    url: '/website/json', 
    type: "post", 
    data: formData 
}).done(function (data) { 
    // remove prior values set upon request response 

    formData.action = null; 
    formData.post = null; 
}); 
+0

Was ist { Daten aus dem Formular} '? Das ist kein legales JavaScript. – sdgluck

+0

@sdgluck es ist wie ein Platzhalter," setze hier den Selektor, den du willst ", ich werde beide Antworten bald testen und ich werde dir Feedback geben .. danke:) – fthiella

+0

@deek Ich mag diesen Ansatz, aber ich kann es nicht funktionieren lassen. Der Ajax-Post ist in Ordnung, aber "Aktion" und "Post" scheinen nicht an den Server gesendet zu werden. Mache ich etwas falsch? – fthiella

Verwandte Themen