0

我对 jquery 和 AJAX 完全陌生,在努力了 5-6 个小时并搜索了我正在寻求帮助的解决方案之后。

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0jquery.min.js"></script>
<script type="text/javascript">
    $(function() {
        $(".submit").live('click',(function() {

            var data = $("this").serialize();
            var arr = $("input[name='productinfo[]']:checked").map(function() {
                return this.value;
            }).get();
            if(arr=='')
            {
                $('.success').hide();
                $('.error').show();
            }
            else
            {
                $.ajax({
                    data: $.post('install_product.php', {productvars: arr}),
                    type: "POST",
                    success: function(){
                        $(".productinfo").attr('checked', false);
                        $('.success').show();
                        $('.error').hide();
                    }
                });
            }
            return false;
        }));
    });
</script>

而 HTML+PHP 代码是,

$json = file_get_contents(feed address);
$products = json_decode($json);
foreach(products as product){
    // define various $productvars as a string
    <input type="checkbox" class="productvars" name="productinfo[]" value="<?php echo $productvars; ?>" />
}
<input type="submit" class="submit" value="Install Product" />

<span class="error" style="display:none"><font color="red">No product selected.</font></span>
<span class="success" style="display:none"><font color="green">product successfully added to database.</font></span>

当我从提要中提取产品信息时,我不想刷新页面,这就是我使用 AJAX 发布方法的原因。使用上面的代码“install_product.php”页面可以正确处理字符串并正确完成其工作。

我面临的问题是,当我第一次选中复选框并安装产品时,它工作得非常好,但在第一次发布“有时它工作,有时它不起作用”之后。由于从提要中提取了新列表,因此每个第一篇文章都是完美的,之后我需要一次又一次地单击安装按钮才能这样做。

我在不同的浏览器上测试了代码,但同样的问题。可能是什么问题?(我在实时主机而不是本地主机上测试代码)

4

2 回答 2

1

$.live已弃用,请考虑$.on()改用。

哪个函数执行一次后没有执行?$.live?

此外,它应该是:

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

不是

var data = $("this").serialize();

在您的示例中,您正在寻找一个名为“this”的显式标签,而不是一个范围。

更新

$(function () {
    $(".submit")
        .live('click', function(event) {

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

        var arr = $("input[name='productinfo[]']:checked")
            .map(function () {
            return this.value;
        })
            .get();
        if (arr == '') {
            $('.success')
                .hide();
            $('.error')
                .show();
        } else {
            $.ajax({
                data: $.post('install_product.php', {
                    productvars: arr
                }),
                type: "POST",
                success: function () {
                    $(".productinfo")
                        .attr('checked', false);
                    $('.success')
                        .show();
                    $('.error')
                        .hide();
                }
            });
        }

        event.preventDefault();

    });
});
于 2012-09-26T06:44:19.007 回答
0

是否有可能,它缺少 arr 的值并显示错误,或者它是否正在拨打电话但没有返回,或者它根本没有到达电话?做一个 console.log 来处理调试并在 firefox / chrome 中检查并查看问题所在和位置。

于 2012-09-26T06:43:59.257 回答