【问题标题】:Array of check boxes ignoring the AJAX call if only one is checked如果仅选中一个,则忽略 AJAX 调用的复选框数组
【发布时间】:2013-10-17 03:30:42
【问题描述】:

抱歉,我这么快就再次发帖,但我确实尝试了很多不同的选项,希望它会起作用。

我有一个 jQuery/AJAX 表单,它将根据用户输入创建数组。然后,AJAX 会将值发送到我的 PHP 脚本,以从我的数据库中提取和放置数据。

我遇到的问题是,当我只选中一个框时,AJAX 会创建一个空白结果

如果您选择 2 个或更多值,它会 100% 正常工作。我在想它可能是由一个以 0 开头的数组或其他一些奇怪的因素引起的。我还检查了我的控制台,它正在向我的 PHP 页面提交正确的值。

单值

XHR 完成加载:“http://healthbenefitsohio.com/expertise.php?expertise%5B%5D=Ancillary”。

二元及以上值

XHR 完成加载:“http://healthbenefitsohio.com/expertise.php?expertise%5B%5D=Ancillary&expertise%5B%5D=SmallGroup”。

然后我决定也许我可以通过使用 if 语句来实现这一点,但这似乎并不奏效。我尝试使用 AJAX 调用的 data 部分中的语句,一个 if/else 语句,每个语句都有自己的 AJAX 调用,我尝试将 if 语句变成一个变量以传递到数据中。

If 语句

if(myArray.size() > 0) {
    //Function goes here
else {
    //Function goes here
}

当前适用于两个及以上值的 AJAX 调用

// Agent search ajax/jQuery
function agentAJAX() {
    $('input').on('click', function() { //Pulls data based on radial input
        var myArray = [];
        var value = $(this).val();

        $(".formC input:checkbox:checked").each(function(){ 
            myArray.push($(this).val()); 
        });
        $.ajax({
            type: "POST",
            datatype: "html",
            data: {
                expertise: myArray
            },
            url: "expertise.php",
            success: function (data) {
                $("#bodyA").html(data);
            }
        });
    });
}

agentAJAX();

IF/else AJAX 调用

// Agent search ajax/jQuery
function agentAJAX() {
    $('input').on('click', function() { //Pulls data based on radial input
        var myArray = [];
        var value = $(this).val();

        $(".formC input:checkbox:checked").each(function(){ 
            myArray.push($(this).val()); 
        });
        if(myArray.size() > 1) {
            $.ajax({
                type: "POST",
                datatype: "html",
                data: {
                    expertise: myArray
                },
                url: "expertise.php",
                success: function (data) {
                    $("#bodyA").html(data);
                }
            });
        }
        else {
            $.ajax({
                type: "POST",
                datatype: "html",
                data: {
                    expertise: value
                },
                url: "expertise.php",
                success: function (data) {
                    $("#bodyA").html(data);
                }
            });
        }
    });
}

agentAJAX();

如果您需要更多信息或代码,请告诉我,我会在午餐后上传。

回答

// Agent search ajax/jQuery
function agentAJAX() {
    $('input').on('click', function() { //Pulls data based on radial input
        var myArray = [];
        var value = $(this).val();

        $(".formC input:checkbox:checked").each(function(){ 
            myArray.push($(this).val()); 
        });
        if(myArray.length === 1) {
            $.ajax({
                type: "POST",
                datatype: "html",
                data: {
                    expertise: value
                },
                url: "expertise.php",
                success: function (data) {
                    $("#bodyA").html(data);
                }
            });
        }
        else {
            $.ajax({
                type: "POST",
                datatype: "html",
                data: {
                    expertise: myArray
                },
                url: "expertise.php",
                success: function (data) {
                    $("#bodyA").html(data);
                }
            });
        }
    });
}

agentAJAX();

【问题讨论】:

    标签: ajax arrays jquery checkbox


    【解决方案1】:

    没有什么像

    myArray.size()

    你必须使用

    myArray.length

    所以你的 if 语句应该是

    if(myArray.length > 1) {
    
    
    }
    

    /更正/

    因为您正在检查数组值是否 === 1,所以您的条件应该是 .length === 1

    像这样的

     if( myArray.length === 1) {
    
    
        } else {
    
    }
    

    您还必须考虑清理您的代码。只需使用一个函数并将数据作为参数传递,您就可以只使用一个 $.ajax 方法而不是复制。

    【讨论】:

    • 应该是 myArray.length > 0 还是 myArray.length > 1?我知道 .length 但在另一个 stackoverflow 中,正确答案与 .size 有关,所以我想我会试一试。我会告诉你它是否有效!
    • 它实际上应该是 ==1 因为如果它是 1 那么你传递不同的数据
    • 太棒了!非常感谢,如果您不介意,您什么时候使用api.jquery.com/size
    • .size().length 是等价的——但请记住,前者是 jQuery 方法,而后者是 JavaScript 原生的。 More discussion here.
    • 如果您想使用 size(),您可以执行类似 $(myArray).size() 的操作。你必须用 $() 来包装它。这在内部也使用 .length ,所以你最好只使用 .length 因为 .size() 会更慢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多