【问题标题】:How to pass Array to JQuery Ajax Post? [duplicate]如何将数组传递给 JQuery Ajax Post? [复制]
【发布时间】:2014-02-22 05:22:46
【问题描述】:

我有以下表格

<input type="text" class="attr_values[]" value="1" /> <input type="text" class="attr_values[]" value="2" />

我正在尝试传递“attr_values”数组中的所有值,以便可以通过 Ajax 发布,但以下内容不起作用。

$.ajax({   
   url: 'index.php',
   type: 'POST',
   data:{ 
      attr_values: $('.attr_values').val()

如何做到这一点?

【问题讨论】:

标签: php ajax arrays post input


【解决方案1】:

首先你必须为所有输入元素设置名称属性并从类属性中删除[],这是绝对错误的类用法:

<input type="text" name="attr_values[]" class="attr_values" value="1" />
<input type="text" name="attr_values[]" class="attr_values" value="2" />

然后,使用 jQuery 将输入值序列化为:

var __data = $('input[name^="attr_values"]').serialize();
// Or if input has parent form
var __data = $('#form-id').serialize();

$.ajax({
    url: 'index.php',
    type: 'POST',
    data: __data

【讨论】:

  • 我曾尝试使用 name=attr_values[] 但我想我忘记了 jquery 中的 input[name=] .. 但使用它我得到: attr_values%5B%5D=1&attr_values%5B% 5D=2 而我实际上只想要 1,2
  • 因此,您可以用逗号分隔值:var e = $('input[name^="attr_values"]'); var v=new Array(e.length); e.each(function(i,j){ v[i]=j.value; }); v.join(","); 或在服务器端执行 implode(',', $_POST['attr_values'])
  • 通过这样做,它起作用了var attrs = new Array(); $('input[name^="attr_values"]').each(function() { attrs.push($(this).val()); }); var attrs_combined = attrs.join(); $.ajax({ url: 'index.php', type: 'POST', data: attrs_combined
【解决方案2】:

使用

var = $( '#your_form_id_or_class' ).serialize() ;

and assign this to **attr_values** 

参考:https://api.jquery.com/serialize/

【讨论】:

    【解决方案3】:

    您必须使用通配符选择器:

    $('input[name^="attr_values"]').serialize();
    

    上面的选择器会找到每个名字以 attr_values 开头的&lt;input&gt; 并为你序列化它,这样你就可以这样做:

    data: $('input[name^="attr_values"]').serialize(),
    

    【讨论】:

      【解决方案4】:

      您的输入元素类名可能不需要[]

      <input type="text" class="attr_values" value="1" />
      <input type="text" class="attr_values" value="2" />
      

      你不需要使用serializejQuery API

      如果传递给jQuery.ajaxdata参数的值是一个Array,jQuery会根据传统设置的值序列化多个具有相同key的值。

      var attrValueArray = $("input.attr_values").map(function(){
        return this.value;
      }).get();
      
      $.ajax({   
         url: 'index.php',
         type: 'POST',
         data:{ 
            attr_values: attrValueArray
      

      【讨论】:

      • 这不起作用。它不返回任何东西
      • @rogernem 回答已更新
      猜你喜欢
      • 1970-01-01
      • 2022-08-04
      • 2018-07-25
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 2011-07-10
      • 2012-03-08
      • 1970-01-01
      相关资源
      最近更新 更多