Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery使用多个数组提交ajax_Jquery_Ajax_Nested_Associative Array_Serializearray - Fatal编程技术网

jQuery使用多个数组提交ajax

jQuery使用多个数组提交ajax,jquery,ajax,nested,associative-array,serializearray,Jquery,Ajax,Nested,Associative Array,Serializearray,嗨,我正在尝试使用ajax内部的submitHandler提交一个表单,也使用美化多个选择的库。以下工作: submitHandler: function(form) { var form = $(this.currentForm); var data = { first_name : form.find('#first_name').attr('value'), last_name : form.find('#la

嗨,我正在尝试使用ajax内部的submitHandler提交一个表单,也使用美化多个选择的库。以下工作:

submitHandler: function(form) {
    var     form = $(this.currentForm);

    var     data = {
        first_name    : form.find('#first_name').attr('value'),
        last_name     : form.find('#last_name').attr('value'),
        chosen_people : form.find('#chosen_people').val(),
    };

    $.ajax({
        type : "POST",
        url : "formhandler.php",
        data : data,
        success : function(response) {
            console.log(response);
        }
    });
}
服务器响应:

array(
    ['first_name'] => 'John'
    ['last_name'] => 'Smith'
    ['chosen_people'] => array(
        [0] => 37
        [1] => 42
    )
)
问题是我的表单很大而且经常更改,我不想一直枚举所有的输入和选择元素。我想说的是:

var     inputs = form.find('input').serializeArray();
var     selects = form.find('.chzn-select').val();
var     data = $.merge(inputs, selects );

...
我尝试过手动输入的各种组合,例如:

for(var select in selects)
    selects[select] = {'name' : select, 'value' : selects[select]};

var     serializedSelects = {'name' : 'chosen_people', 'value' : selects };
var     data = $.merge(inputs, serializedSelects);
但是我就是不能让数组正确嵌套,这样服务器的post变量中就有了正确的数组结构

问题的要点是,尽管jQuery为元素提供了$.serializeArray(),但它没有提供类似$.paramArray()的内容来获取关联数组并将其转换为序列化数组。它只能输出序列化字符串,这很难进一步操作。我不想包含另一个ajax框架,所以我希望有一个简单的解决方案

另外,我正在使用php5和jquery1.8.3。以下是我到目前为止发现的情况,也许我只是在尝试添加selects数组之前弄乱了它的格式:


谢谢

您需要的是序列化主窗体本身:

$('form').submit(function() {
  var data = $(this).serialize();
  e.preventDefault();
$.ajax({
    type : "POST",
    url : "formhandler.php",
    data : data,
    success : function(response) {
        console.log(response);
    }
});
});

我不知道为什么这对我来说如此痛苦,但我最终发现了如何为ajax格式化数组。数组的URL编码方式让我很惊讶。。我不确定深度嵌套是否真的得到普遍支持。以下是ajax可以获取的各种版本的阵列数据:

var     associativeData = {'first_name' : 'John', 'last_name' : 'Smith', 'chosen_people' : Array('37', '42')};
var     nameValueData = Array(
    {'name' : 'first_name', 'value' : 'John'},
    {'name' : 'last_name', 'value' : 'Smith'},
    {'name' : 'chosen_people[0]', 'value' : 37},
    {'name' : 'chosen_people[1]', 'value' : 42}
);
var     serializedData = "first_name=John&last_name=Smith&chosen_people[]=37&chosen_people[]=42"
下面是我添加自己数组的方法。if(values)行是可选的,但如果没有它,else案例将不会触发,因此如果未选择任何内容,则您根本无法在服务器上获取所选的_people var:

var     data = form.find('input').serializeArray();
var     values = form.find('#chosen_people').val();
if(values)
for(var value in values)
    data.push({'name' : 'chosen_people[' + value + ']', 'value' : values[value]});
else
    data.push({'name' : 'chosen_people[]', 'value' : ''});

只是发布这个答案,希望它能帮助别人。

为什么不直接执行
form.serializeArray()
?您是在尝试获取表单中所有元素的值,还是仅获取一些元素的值?嘿,谢谢您的快速回复。不幸的是,它没有工作,以下是输出:数组(['first\u name']=>'John'['last\u name']=>'Smith'['selected\u people']=>4)出于某种原因,它没有序列化所选择的多选择。将你的答案与这一点结合在一起,我认为jQuery需要考虑更新过时的序列化函数来处理对象、关联数组、数值数组的真实世界混合。如果它们能找到一种优雅的识别方法,甚至可能序列化数组。是的,你说得对。但我不知道你有多选:)