2014-06-26 17 views
1

我有下面的代碼。AjaxSubmit不是DOM重載的功能

$('body').on('submit', '.some-form', function (event) { 
    $(this).ajaxSubmit({ 
     dataType: 'json', 
     success: function (data, statusText, xhr, form) { 
      var url = 'some/url'; 

      // Reload the form markup/DOM using the response 
      $.ajax({ 
       dataType: 'html', 
       type: 'get', 
       url: url 
      }).done(function (html) { 
       // get markup from url and replace the form markup ...  
      }); 
     }, 
     error: function() { 
      alert('error'); 
     } 
    }); 

    return false; 
}); 

基本上我在做什麼這裏是

  1. 提交和處理表單
  2. 得到的結果
  3. 如果成功,從頁面獲得新的形式標記,然後取代目前的形式標記。 如果失敗,顯示錯誤

現在,因爲我委派提交事件的身體,不應該有與 問題處理上新加載的形式標記提交。

函數處理器運行正常,直到我看到這個錯誤

TypeError: $(...).ajaxSubmit is not a function 

error: function() { 

任何想法,爲什麼會這樣?這意味着ajaxSubmit不存在,但我沒有重新加載 頁面。

編輯:是的,我現在用的是jquery form plugin

+0

你加載了jQuery Form Plugin嗎? – Barmar

+0

http://malsup.com/jquery/form/ – Barmar

+0

確實,我的想法是heck是來自哪裏的ajaxSubmit函數。 –

回答

0

我的錢是在以下方面:

在您的要求爲HTML:

// get markup from url and replace the form markup ...

你加載整個頁面其中包含一個jQuery庫。當你這樣做時,HTML響應中的新jQuery腳本將被下載解析並執行,它將覆蓋當前的jQuery原型,這意味着jQuery.ajaxSubmit不再可訪問。

很聰明,呃?

解決此問題的最佳方法是不要求包含jQuery腳本的完整頁面,而是請求僅包含所需DOM結構的URL,而不是包含頁眉,頁腳,腳本的整個頁面等等。

+0

對我來說,我已經在做它了。我所調用的頁面不包含無關的數據,例如頁眉,頁腳或佈局。 – arvinsim

+0

Alrighty,但我可以向你保證,如果你看看你的網絡標籤,那麼你會在第一次執行你的請求後看到一個新的jQuery腳本被下載。在你的'$(this).ajaxSubmit()'之前試試這個,'console.log($)'和'console.log($ .fn)' - 這是你第一次看到'ajaxSubmit'是'$ .fn'對象,第二次你不會,但是當你使用'console.log($)'時,它看起來應該是相同的。這意味着您的'$ .fn'在第一個請求之後的某處被覆蓋,但在第二個請求之前,這意味着$ .ajaxSubmit將不再可用。 – Adam