【问题标题】:Submit form input array with jquery ajax post使用 jquery ajax post 提交表单输入数组
【发布时间】:2013-01-06 15:12:44
【问题描述】:

好的,我想通过 jquery ajax 提交表单。所有输入都在一个数组中,并且是多维的。

它是一种使用数组键作为问题 ID 的动态形式。 子键用于对问题集中的问题进行分组。

<form name="testing" id="testing" method="post">
    <label>Question 1?</label> 
    <input type="text" name="data[14][1]" id="" class="" value=""><br>
    <label>Question 2?</label> 
    <input type="text" name="data[16][1]" id="" class="" value=""><br>
    <label>Question 1?</label> 
    <input type="text" name="data[14][2]" id="" class="" value=""><br>
    <label>Question 2?</label> 
    <input type="text" name="data[16][2]" id="" class="" value=""><br>
    <label>Question 3?</label> 
    <select name="data[19]" id="" class="">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
    </select><br>
    <input type="submit" value="Submit">
</form>

这就是我的示例 html。这是我的示例 jquery:

$("#testing").submit(function() { 
           var data = $('input[name^="data\\["]').serializeArray();
                $.ajax({ 
                 type: "POST",
                 url:  "upload.php",
                 data: {internalform: "submit", data: data},
                 dataType : "text",

           success: function(returndata){
            if(returndata == "no") 
             { return false;
             } else {
               alert("clicked 1 " + returndata);
                }
                 } 
                 });    
            return false;
            }); 

问题是我把它作为返回数组:

Array
(
    [0] => Array
        (
            [name] => data[14]
            [value] => sd
        )

    [1] => Array
        (
            [name] => data[16]
            [value] => s
        )

)

但我想要一个这样的数组:

Array ( [14] => ddd [16] => ddd [19] => 4 ) 

我确定它很简单,但我错过了一些东西。我知道它为什么这样做,但我无法按照我想要/需要的方式得到它。有人可以帮忙吗?

【问题讨论】:

  • 当你说 returnarray 你是指returnData 还是别的什么?
  • 我看到的所有关于这个问题的答案都是解决方法,但它们并没有解决根本问题——为什么serializeArray 不能正确解析括号?

标签: php jquery ajax input multidimensional-array


【解决方案1】:
var data = {};
$.each($('input[name^="data\\["]')​.serializeArray()​, function() {
    data[this.name] = this.value;
})​;

给出控制台错误>>

Uncaught SyntaxError: missing ) after argument list

【讨论】:

    【解决方案2】:

    试试下面的sn-p,我没有测试过,但应该可以。

    var data = $('input[name^="data\\["]').serializeArray();部分替换为下面的sn-p

    var data = {};
    $.each($('input[name^="data\\["]')​.serializeArray()​, function() {
        data[this.name] = this.value;
    })​;
    

    试试这个,它会解决前面的数据问题

    我已经解决了这个

    var data = {};
    $.each($('select[name^="data\\["] , input[name^="data\\["]').serializeArray(), function() {
       var vv = this.name.replace(/data/, '' ).replace(/(\[[0-9]\])$/,'');
       data[vv] = this.value;           
    });
    

    【讨论】:

    • 结束了。我得到这个作为回应。 ( [data[14] => ssssss [data[16] => ss )有两个问题。 1.数据前面的 [ 不应该在那里。 2. 选择输入未发布。不过差不多了。
    • 谢谢,我搞砸了,我让它工作了:var data = {}; $.each($(this).serializeArray(), function() { data[this.name] = this.value; });这就是我想要的,我从表单中的名称中删除了数据部分,因此表单名称只是问题 id
    【解决方案3】:

    试试这个

    var data = {}; 
    $('input[name^="data\\["]').serializeArray().map(function(n){
        var name = n['name'].replace(/data\[([0-9]*)\]\[(.*)\]/, '$1');
        data[name] = n['value'];
    });
    

    【讨论】:

      【解决方案4】:

      我不知道如何在 jquery 中执行此操作,但您可以在 php 中转换该数组

      $result = array();
      foreach($array as $item) {
         $index = intval(preg_replace("/data\[([0-9]*)\]/", '\1' $item['name']));
         $result[$index] = $item['value'];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-20
        • 1970-01-01
        相关资源
        最近更新 更多