【问题标题】:jQuery .ajax() POST Only checkboxes :checkedjQuery .ajax() 仅 POST 复选框:已选中
【发布时间】:2014-03-21 21:48:38
【问题描述】:

尝试传递复选框时,我的 .ajax() 函数出现错误

代码如下:

if(typeof($post) !== 'undefined'){
    var $fname = $($post).attr('name').toString();
    var data = {$fname : []};
    alert($post);
    alert($fname);
    $($post + ":checked").each(function() {
        data[$fname].push($(this).val());
    });
}else{
    var data = null;    
}

我在 firebug 中遇到的错误是:data[$fname].push($(this).val()); is undefined

$post 只是传递给函数的类名。在本例中为.del-checked

警报成功提醒我类名和复选框名称...在本例中为del[]

我怎样才能让它工作以便将它传递给$.ajaxdata 选项?

【问题讨论】:

  • @hjpotter92 .del-checked
  • 你为什么不直接使用.serialize 而不是自己拼凑数据集……?
  • @putvande 我指的是字符串和对象 :-) 仅针对 $($post + ":checked") 部分

标签: javascript jquery ajax checkbox


【解决方案1】:

因为创建新对象时不能使用变量作为键

var data = {$fname : []};

和做是一样的

var data = {"$fname" : []};

您需要创建对象并用括号添加键

var data = {};
data[$fname] = [];

【讨论】:

  • 这个数组能容纳多少个有限制吗?我正在尝试创建“检查全部”并删除,但我注意到删除功能仅接收 999 项?
  • Array 可以容纳更多的东西,看看开发工具的 post 请求中发送了什么。
  • firebug 仅显示 1000 个项目(当然基于 0 的数组)正在发布:编辑...抱歉它显示了所有 4800 个项目,所以我的问题在其他地方...谢谢您的帮助
【解决方案2】:

您不能将变量用作键除非您使用括号表示法

if (typeof($post) !== 'undefined'){

    var $fname = $($post).attr('name');
    var data = {};

    data[$fname] = [];

    $($post).filter(":checked").each(function() {
        data[$fname].push( this.value );
    });

}else{

    var data = null;    

}

【讨论】:

    【解决方案3】:

    怎么样:

    var data = $($fname).serialize();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 2011-03-08
      • 2010-10-28
      相关资源
      最近更新 更多