2011-06-21 199 views
0

我正在使用jQuery的活動查詢插件來附加動態行爲以形成元素並創建ajax表單。我面臨的問題如下:向服務器發送請求兩次

在提交的響應中,如果我沒有再次對元素調用livequery,那麼新加載的表單不會獲得所需的行爲。但是,如果我再次提交LiveCountry,則表單將不止一次提交。

其實計數每次都會增加。我嘗試使用過期。但這根本沒有幫助。有關如何實現這一點的任何意見。

我想要做的是創建所有形式的類js-ajax-表單作爲通過ajax提交的表單。由此產生的內容也是一種應該保持相同行爲的形式。這是必須通過ajax提交。

希望你的指導。

$.fn.fajaxform = function() { 
     var container = null; 
     $(this).livequery(
       'submit', 
       function(e) { 
        var $this = $(this); 
        container = $this.parent(); 
        $this.ajaxSubmit({ 
         beforeSubmit : function(formData, jqForm, options) { 
          $('input:file', jqForm[0]).each(function(i) { 
           if ($('input:file', jqForm[0]).eq(i).val()) { 
            options['extraData'] = { 
             'is_iframe_submit' : 1 
            }; 
           } 
          }); 

          container.block({ 
           message : '<h1><img src="/img/busy.gif" /> Loading please wait...</h1>' 

          }); 

         }, 
         success : function(responseText, statusText) { 

          redirect = responseText.split('*'); 
          if (redirect[0] == 'redirect') { 
           location.href = redirect[1]; 
          } else if ($this.metadata().container) { 
           $('.' + $this.metadata().container).html(
             responseText); 

          } else { 
           $this.parents('div.js-responses').eq(0).html(
             responseText); 
          } 


          $('.js-ajax-form').each(
           function() 
           { 
            if (this.expire) 
            { 
             this.expire(); 
            } 
           } 
          ); 
          $('.js-ajax-form').fajaxform(); 
          container.unblock(); 
         } 
        }); 
        return false; 
       }); 
    }; 

回答

0

剛從這裏臀部射擊:腳本是否包含多次?我曾多次意外加載相同的腳本(使用requireJS),其中事件多次觸發。

+0

是的腳本只包含一次,但是我注意到的一件事是,因爲我正在使用livequery,因此我不需要調用顯式的expire()。 Livequery應該可以解決這個問題。如果我不做我在做的事情,那麼隨後加載的表單不會獲得ajax行爲,如果我這樣做,那麼它會多次提交。 – user210504

0

升級到最新版本的jQuery後,問題就解決了。我認爲,.live可能是一個更好的選擇,因爲livequery不再是積極的開發。