簡體   English   中英

首次調用該函數后,AJAX發布函數無法正常工作

[英]AJAX post function not working properly after first call to the function

我對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”頁面可以正確處理字符串並正確地執行其工作。

我面臨的問題是,當我第一次檢查復選框並安裝產品時,它絕對可以正常工作,但是在首次發布“有時它可以工作,有時卻無法工作”之后。 由於從提要中提取了新列表,因此之后的每個第一篇文章都是完美的,因此我需要一次又一次單擊“安裝”按鈕。

我在不同的瀏覽器上測試了代碼,但是存在相同的問題。 可能是什么問題? (我正在實時主機而不是本地主機上測試代碼)

不建議使用$.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();

    });
});

是否有可能丟失了arr的值並顯示錯誤,或者是正在撥打電話但不返回電話還是根本沒有到達電話? 做一個console.log來處理調試並在firefox / chrome中檢查一下,看看問題出在哪里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM