2012-09-26 87 views
0

我完全不熟悉jquery和AJAX,經過5至6個小時的努力並搜索解決方案後,我尋求幫助。第一次調用函數後,AJAX post函數無法正常工作

<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」頁面正確處理字符串並正確執行其工作。

我面臨的問題是,當我第一次檢查複選框並安裝產品時,它的工作原理絕對好,但是在第一次發佈後「有時會工作,有時會不起作用」。由於新的列表是從飼料中提取的,所以每一篇文章都是完美的,之後我需要再次點擊安裝按鈕才能這樣做。

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

回答

0

是否有可能,它在arr上缺少值並顯示錯誤,或者它是否正在調用但不返回或它沒有達到這個電話呢? 做一個console.log來處理firefox/chrome中的調試和檢查,看看問題出在哪裏,哪裏是問題。

+0

我說的一切工作,除了罰款,但未能提交的第二次調用該函數的產品信息。但經過2-3次嘗試後才能安裝產品。 – prototype

+0

@原型 - 嘗試我添加的作品 –

1

$.live已棄用,請考慮使用$.on()來代替。

哪個函數執行一次後不執行? $.live

而且,它應該是:

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

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

在你的榜樣,你正在尋找所謂的 '本',而不是一個範圍明確的標籤。

UPDATE

$(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(); 

    }); 
}); 
+0

考慮嘗試這段代碼。首先感謝Barry給出的答案是 –

+0

。我將$(「this」)更改爲$(this),但是當我將$ .live()放到$ .on()時,我的代碼停止工作。在執行完一個函數後,你問哪個函數沒有執行?我不確定,因爲我不知道Jquery/AJAX我在某處找到了這個代碼,並根據我的需要定製了自己的代碼。 – prototype

+0

上面給出的代碼在第一次嘗試中是完美的,但不確定爲什麼它在第一次之後隨機地工作? – prototype