对非表单对象使用serializeArray?

时间:2010-09-20 15:26:56

标签: jquery post serializearray

我正在尝试发布一些从非形式元素构建的数据,但我似乎无法破解它。

如何使用与serializeArray()格式相同的格式创建数组?

我已尝试了多种变体,但它只选取了最后一个.active标记。

$('li.tag.active').each(function() {
    values = {};
    values['tagID'] = $(this).attr('id');
});

$.post("/scripts/php/process.php",{     
    'data': data,
    funcName : 'tagResults'
},function(results){
    $("#results").html(results);
}) 

4 个答案:

答案 0 :(得分:6)

ok - 最后发现这个就像使用serializeArray()的输入字段一样......

function getTags(){

        var data = new Array();

        $('li.tag.active').each(function() {
                data.push({ 'name':$(this).attr("name"), 'value':$(this).attr("id")});
         });

         $.post("/scripts/php/process.php",{ 
             'data': data,
             funcName : 'tagResults'
        }) 

}

答案 1 :(得分:2)

将此函数添加到JS代码中允许您使用“name”和“value”属性序列化任何对象。我通常使用它来序列化表单。我知道你说这些控件是无形的,但我想,这可以用来序列化任何具有name / value属性的对象。它看起来也很容易改变它以寻找对象的其他属性,比如ID。由于您没有显示“数据”的定义或“值”的用法,因此很难准确说出您在那里做了什么

    $.fn.serializeObject = function()
    {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function() {
            if (o[this.name]) {
                if (!o[this.name].push) {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            } else {
                o[this.name] = this.value || '';
            }
        });
        return o;
    };

然后将其添加到您的网址字符串

var dataToPassToAjax = 'allData=' + myObject.serializeObject();

如果您只传递一个值,则无需序列化。

$.post("/scripts/php/process.php",{ 'data': 'data=' + $('li.tag.active').id, funcName : 'tagResults' }). 

然后在process.php中,只需获取 $ _ REQUEST ['data'] 的值,它就会有你的ID

答案 2 :(得分:1)

我从Ob看到的最佳答案。和贡特拉姆: jQuery serialize / serializeArray from an element that is not a form

$('div :input').serializeArray()

除了输入之外,这还会选择select和textarea。甜。

答案 3 :(得分:0)

使用此功能,您可以将任何元素集串行化:

function makeSerializable(elem) {
  return $(elem).prop('elements', $('*', elem).andSelf().get());
}

然后你可以像这样使用它:

var arr = makeSerializable('li.tag.active').serializeArray();

var $elem = $('li.tag.active');
var data = makeSerializable($elem).serialize();