jQuery: serialize () form e altri parametri


115

È possibile inviare elementi del form (serializzati con .serialize()metodo) e altri parametri con una singola richiesta AJAX?

Esempio:

$.ajax({
    type : 'POST',
    url : 'url',
    data : {
        $('#form').serialize(),
        par1 : 1,
        par2 : '2',
        par3: 232
    }
}

In caso contrario, qual è il modo migliore per inviare un modulo insieme ad altri parametri?

Grazie

Risposte:


236

serialize() trasforma efficacemente i valori del modulo in una stringa di query valida, in quanto tale puoi semplicemente aggiungere alla stringa:

$.ajax({
    type : 'POST',
    url : 'url',
    data : $('#form').serialize() + "&par1=1&par2=2&par3=232"
}

7
@Falcon Cosa intendi per cocco qui?
Shafizadeh

come posso cambiare 1 in variabile
Slatan-ko

3
@Shafizadeh È una rima (molto - cocco)
Adam

Puoi per favore dire perché qui non c'è bisogno di contentType ?? Viene aggiunto di default?
kernal lora

Sì, l'URL del modulo codificato è l'impostazione predefinita. Vedere la documentazione di jquery per maggiori informazioni
Rory McCrossan

77

In alternativa potresti usare form.serialize()con $.param(object)se memorizzi i tuoi parametri in qualche variabile oggetto. L'utilizzo sarebbe:

var data = form.serialize() + '&' + $.param(object)

Vedere http://api.jquery.com/jQuery.param per ulteriori riferimenti.


10
Mi piace questa. Significa che non devo guardare una brutta stringa di query!
Greg Woods

4
Questo è di gran lunga il modo migliore. La risposta accettata è confusa e non dovrebbe mai essere utilizzata in nessuna applicazione di produzione.
FastTrack

3
Se parliamo di un ambiente di produzione, nessuna di queste risposte dovrebbe essere utilizzata. Il formdovrebbe contenere tutte le informazioni (in campi nascosti se necessario) in modo che possa essere serializzato in una singola chiamata. In questo modo, se JS è disabilitato o fallisce, l'invio del modulo dovrebbe comunque avere un fail-safe e includere tutti i dati quando inviati.
Rory McCrossan

9

Non lo so, ma nessuno dei precedenti ha funzionato per me, quindi ho usato questo e ha funzionato:

Nell'array serializzato del modulo viene archiviato come coppia valore chiave

Abbiamo inserito il nuovo valore o i nuovi valori qui nella variabile del modulo e quindi possiamo passare questa variabile direttamente ora.

var form = $('form.sigPad').serializeArray();
var uniquekey = {
      name: "uniquekey",
      value: $('#UniqueKey').val()
};
form.push(uniquekey);

1

Se vuoi inviare dati con form serialize puoi provare questo

var form= $("#formId");
$.ajax({
    type: form.attr('method'),
    url: form.attr('action'),
    data: form.serialize()+"&variable="+otherData,
    success: function (data) {
    var result=data;
    $('#result').attr("value",result);

    }
});

0

passare il valore del parametro in questo modo

data : $('#form_id').serialize() + "&parameter1=value1&parameter2=value2"

e così via.


0

Seguendo la risposta di Rory McCrossan , se vuoi inviare un array di numeri interi (quasi per .NET), questo è il codice:

// ...

url: "MyUrl",       //  For example --> @Url.Action("Method", "Controller")
method: "post",
traditional: true,  
data: 
    $('#myForm').serialize() +
    "&param1="xxx" +
    "&param2="33" +
    "&" + $.param({ paramArray: ["1","2","3"]}, true)
,             

// ...

-1

Puoi creare un modulo ausiliario usando jQuery con il contenuto di un altro modulo e quindi aggiungerlo ad altri parametri in modo da doverlo serializzare solo nella chiamata ajax.

function createInput(name,value){
    return $('<input>').attr({
        name: name,
        value: value
    });
}
$form = $("<form></form>");
$form.append($("#your_form input").clone());
$form.append(createInput('input_name', 'input_value'));
$form.append(createInput('input_name_2', 'input_value_2'));
....

$.ajax({
    type : 'POST',
    url : 'url',
    data : $form.serialize()
}

-1

Risolvo il problema con l'istruzione under; invia i dati con l'URL stesso metodo GET

$.ajax({
    url: 'includes/get_ajax_function.php?value=jack&id='+id,
    type: 'post',
    data: $('#b-info1').serializeArray(),

e ottieni valore con $_REQUEST['value']OR$_GET['id']


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.