3

好的,我想通过 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 ) 

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

4

4 回答 4

3

试试下面的代码片段,我还没有测试过,但它可能应该可以工作。

var data = $('input[name^="data\\["]').serializeArray();用下面的代码片段替换部分

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;           
});
于 2013-01-23T08:00:22.210 回答
0

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

$result = array();
foreach($array as $item) {
   $index = intval(preg_replace("/data\[([0-9]*)\]/", '\1' $item['name']));
   $result[$index] = $item['value'];
}
于 2013-01-23T07:59:26.463 回答
0

尝试这个

var data = {}; 
$('input[name^="data\\["]').serializeArray().map(function(n){
    var name = n['name'].replace(/data\[([0-9]*)\]\[(.*)\]/, '$1');
    data[name] = n['value'];
});
于 2013-01-23T08:25:29.477 回答
0
var data = {};
$.each($('input[name^="data\\["]')​.serializeArray()​, function() {
    data[this.name] = this.value;
})​;

给出控制台错误>>

Uncaught SyntaxError: missing ) 在参数列表之后

于 2016-10-23T16:47:24.107 回答