使用jQuery AJAX POST提交表单输入数组

3

好的,我希望你能帮助翻译一下关于IT技术的内容。以下是需要翻译的内容:

我想通过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还是其他什么东西? - rink.attendant.6
我看到的所有关于这个同样问题的答案都是解决方法,但它们没有解决根本问题 - 为什么 serializeArray不能正确解析括号? - alexw
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;           
});

它接近了。我得到这个作为响应。( [data[14] => ssssss [data[16] => ss )有两个问题。
  1. data前面的 [ 不应该出现。
  2. 选择输入没有被发布。
不过已经接近成功了。
- Alan
谢谢,我把它弄了一下,用这个方法让它工作了:var data = {}; $.each($(this).serializeArray(), function() { data[this.name] = this.value; });这样做就达到了我想要的效果,并且我从表单中删除了名称中的数据部分,所以表单名称只是问题ID。 - Alan

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

控制台错误提示 >>

未捕获的 SyntaxError: 缺少参数列表后的 )


0

我不知道如何在jquery中实现这个,但你可以在php中转换那个数组

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

0

试试这个

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接