jQuery:serialize()表单和其他参数

问题描述 投票:0回答:13

是否可以通过单个 AJAX 请求发送 form 元素(使用

.serialize()
方法序列化)和其他参数?

示例:

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

如果不是,提交表单和其他参数的最佳方式是什么?

谢谢

jquery ajax forms serialization
13个回答
277
投票

serialize()
有效地将表单值转换为有效的查询字符串,因此您可以简单地附加到字符串:

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

88
投票

或者,如果您将参数存储在某个对象变量中,则可以将

form.serialize()
$.param(object)
一起使用。用法是:

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

请参阅 http://api.jquery.com/jQuery.param 以获取更多参考。


11
投票

我不知道,但以上方法都不适合我,然后我用了这个,它起作用了:

在表单的序列化数组中,它存储为键值对

我们将一个或多个新值推送到表单变量中,然后我们现在可以直接传递该变量。

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

5
投票

如果你想用表单序列化发送数据,你可以尝试这个

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);

    }
});

2
投票
$("#add_form").submit(function(e) {
    e.preventDefault();
    var total_qty = $('#total_qty').text();
    var total_amt = $('#total_amt').text();
       
    $("#add_btn").val('adding....');
    $.ajax({
        url: 'action.php',
        method: 'post',
        data: $(this).serialize() + "&total_qty="+total_qty + "&total_amt="+total_amt,
        success: function(data){
            console.log(data);
        }   
    });
});

0
投票

像这样传递参数值

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

等等。


0
投票

按照 Rory McCrossan 的回答,如果您想发送整数的数组(几乎适用于.NET),这是代码:

// ...

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)
,             

// ...

0
投票

在js中编码:

  var temp =    $("#pay_property_amount").serialize();
            temp = btoa(temp);

并传入 ajex

 data: { temp_data : temp },

在php中解码

    $temp_data = base64_decode($this->input->post('temp_data'));

 if($temp_data){
$temp_data = $this->unserializeForm($temp_data);
 }


function unserializeForm($str) {
$returndata = array();
$strArray = explode("&", $str);
$i = 0;
foreach ($strArray as $item) {
    $array = explode("=", $item);
    
    if (preg_match('/(%5B%5D)/', $array[0])) {
          $array[0] = str_replace('%5B%5D','',$array[0]);
          if(array_key_exists($array[0],$returndata)){
                  $returndata[$array[0]][]=$array[1];
          }else{
              $returndata[$array[0]] =array();
              $returndata[$array[0]][]=$array[1];
          }
    }else
    {
        $returndata[$array[0]] = $array[1];
    }
    
    
}

return $returndata;
}

0
投票

想要向表单数据添加新数据的可以使用此方法。 示例:

$("form#myForm").submit(function(e){
    e.preventDefault();
    let formData = jQuery("#myForm").serializeArray();
    let newData = [
        {name:"city", value: "Ankara"},
        {name:"jobs", value: "Full-Stack Web Developer"},
        {name:"action", value: "ajax_proccess"} 
    ];
    let postData = formData.concat(newData);

    console.log(formData);
    console.log(newData);
    console.log(postData);

    jQuery(".alert").text("İş: " + postData[4]['value']);
    
    jQuery.ajax({
        url: jQuery("#myForm").attr('action'),
        type: 'POST',
        dataType: 'json',
        data: postData,
        success: function(data) {
            //let response = JSON.parse(data);
            console.log(data);
            alert('Submitted.');
            jQuery(".alert").text(newData[5]);
        }
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="POST" action="" id="myForm">
<input type="hidden" name="name" value="Mahmut Yüksel">
<input type="hidden" name="surname" value="Mert">
<input type="hidden" name="countary" value="Turkey">
<input type="submit" value="Gönder">
</form>
<div class="alert">İş: </div>


0
投票
cod 100% funcional 
<form id="formElem">
  <input type="text" name="firstName" value="John">
  Imagen: <input type="file" name="picture" accept="image/*">
  <input type="submit">
</form>

<script>
  formElem.onsubmit = async (e) => {
    e.preventDefault();

    let response = await fetch('/article/formdata/post/user-avatar', {
      method: 'POST',
      body: new FormData(formElem)
    });

    let result = await response.json();
    enter code here
    alert(result.message);
  };
</script>

-1
投票

我修复了 under 语句的问题; 使用与 GET 方法相同的 url 发送数据

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

并通过

$_REQUEST['value']
$_GET['id']

获取价值

-1
投票

您也可以使用serializeArray函数来执行相同的操作。


-2
投票

您可以使用 jQuery 与另一个表单的内容创建一个辅助表单,然后添加该表单其他参数,这样您只需在 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()
}
© www.soinside.com 2019 - 2024. All rights reserved.