【问题标题】:Using serializeArray for non-form objects?对非形式对象使用 serializeArray?
【发布时间】:2010-09-20 15:26:56
【问题描述】:

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

如何创建与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);
}) 

【问题讨论】:

    标签: jquery post serializearray


    【解决方案1】:

    好的 - 最后发现它的工作原理与使用 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'
            }) 
    
    }
    

    【讨论】:

      【解决方案2】:

      在你的 JS 代码中添加这个函数可以让你序列化任何带有“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;
          };
      

      然后将其添加到您的 url 字符串中

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

      如果你只传递一个值,你不需要序列化。

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

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

      【讨论】:

      • 很好。我得自己试试:)
      • 谢谢 dutchie - 试过这个,但似乎没有得到任何回报,但也许我用错了?是
      • $.post("/scripts/php/process.php",{ 'data': $('li.tag.active').serializeObject(), funcName : 'tagResults' })正确的方法?
      • 如果你只是传递一个对象,你不需要序列化。 $.post("/scripts/php/process.php",{ 'data': 'data=' + $('li.tag.active').id, funcName : 'tagResults' }).然后在 process.php 中,只需获取 $_REQUEST['data'] 的值,它就会有你的 ID
      • 我正在尝试序列化所有 li.tag.active 对象,因此我想要序列化的对象不止一个。基本上我通常使用; var data = $("input.toPost").serializeArray();这适用于 .toPost 类的任何输入。我假设 $('li.tag.active').serializeObject() 会以相同的方式工作,但似乎不是? li 元素是
      • TAG TITLE
      • TAG TITLE 2
      • TAG TITLE 3
      • - 抱歉之前没说清楚!
      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        使用此功能,您可以使任何一组元素可序列化:

        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();
        

        【讨论】:

          猜你喜欢
          相关资源
          最近更新 更多
          热门标签