首次调用函数后,AJAX post函数无法正常工作

时间:2012-09-26 06:38:24

标签: php javascript ajax jquery post

我是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>

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

我面临的问题是,当我第一次检查复选框并安装产品时,它工作得很好,但是在第一次发布后“有时它工作,有时它不起作用”。当新的列表从Feed中提取后,每个第一篇文章都是完美的,之后我需要再次单击“安装”按钮来执行此操作。

我在不同浏览器上测试了代码,但问题相同。可能是什么问题? (我正在测试活动主机上的代码而不是localhost)

2 个答案:

答案 0 :(得分: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();

    });
});

答案 1 :(得分:0)

是否可能,它错过了arr的值并显示错误,或者是它正在拨打电话但没有返回,或者它根本没有接通电话? 做一个console.log来处理debuging并检查firefox / chrome中的内容,看看问题是什么以及在哪里。