2015-01-17 81 views
1

這是我使用ajax在購物車中添加產品的簡單代碼,但是當用戶單擊過快時,某些產品不會添加到購物車中。 在我的第一行,我使用序列化從表單獲取數據,然後調用ajax並將產品添加到購物車中。 現在給我解決它的地方,我可以把超時或延遲和類似的東西,所以執行停止有時。在jquery窗體中設置jquery延遲序列化變量

var datas = form.serialize(); 

      if(usefancy){ 
       $.fancybox.showActivity(); 
      } 

      $.getJSON(vmSiteurl+'index.php?option=com_virtuemart&nosef=1&view=cart&task=addJS&format=json'+vmLang,encodeURIComponent(datas), 
      function(datas, textStatus) { 
       if(datas.stat ==1){ 

        var txt = datas.msg; 
       } else if(datas.stat ==2){ 
        var txt = datas.msg +"<H4>"+form.find(".pname").val()+"</H4>"; 
       } else { 
        var txt = "<H4>"+vmCartError+"</H4>"+datas.msg; 
       } 

回答

0

只需將它包裝在一個函數:

var datas = ''; 
setTimeout(function(){ 
    datas=form.serialize(); 
},1000); 

更好的方法

查找和事件觸發,當用戶完成增加產品(也許一個按鈕,點擊或那種東西)然後進行序列化和ajax調用。

假設你已經使用id = 「sendProduct」 按鈕

<button id="sendProduct">Send product</button> 

,你可以這樣做:

$("#sendProduct").click(function() {// Everytime user clicks "sendProduct" you will send info to the server. 
    var datas = form.serialize(); 

    if (usefancy) { 
     $.fancybox.showActivity(); 
    } 

    $.getJSON(vmSiteurl + 'index.php?option=com_virtuemart&nosef=1&view=cart&task=addJS&format=json' + vmLang, encodeURIComponent(datas), 

    function (datas, textStatus) { 
     if (datas.stat == 1) { 
      var txt = datas.msg; 
     } else if (datas.stat == 2) { 
      var txt = datas.msg + "<H4>" + form.find(".pname").val() + "</H4>"; 
     } else { 
      var txt = "<H4>" + vmCartError + "</H4>" + datas.msg; 
     } 
    }); 
}); 
+0

我有關於上述問題的另一個問題,這是一個正確的方式裝置是能夠設定在可變延遲 – Prabhash

+0

這意味着,第二後,DATAS將包含序列化的形式的值。我不知道你的問題到底是什麼,這取決於問題,這可能是一個解決方案或不。 – acontell

+0

其實問題是我有jquery ajax在購物車中添加產品時,用戶緩慢地添加產品,然後所有工作正常,但當用戶趕時間的一些產品沒有添加到購物車。 我在想,如果我設置分配變量的延遲,那麼問題應該解決。 – Prabhash

0
setTimeout(function(){ 
     var datas = form.serialize(); 
    }, 3000); 

是3000,相當於3秒(3000毫秒)。

0

使用setTimeout是一種非常不可靠的方式更新變量(如果jQuery函數甚至可能在3秒內無法執行,那該怎麼辦?)。相反,您應該使用許多jQuery函數中可用的callback功能,並在該函數中設置該變量。

編輯:對於用戶點擊太快的問題,您必須實現一個簡單的鎖定機制,以便在將商品添加到購物車時禁用「添加到購物車」選項。這可以作爲實現:

var cartLock = false;  //means you can add items to cart 

,因爲你需要捕獲complete的能力,我會推薦以下方法,

$.ajax({ 
     type: "GET", 
     url: url, 
     dataType: "json", 
     beforeSend: function(msg){ 
     cartLock = true;     // Just before calling 
     }, 
     success: function(msg){ 
     // your logic here 
     }, 
     complete: function(){ 
     cartLock = false;    // After request completes 
     } 
    }); 

現在,一個最後的檢查,你需要介紹的是, cartLockfalse時,您只能撥打$.ajax()。希望這是有道理的。

+0

我已經更新了快速點擊問題的答案。休息應該正常工作。接受答案,如果它解決了你的問題。 – activatedgeek