2014-02-24 101 views
0

我試過翻看至少一兩個關於AJAX/jQuery失敗的問題,但似乎沒有一個是我的問題。JavaScript/jQuery提交函數/ AJAX調用不是從鏈接文件中調用

我有一個網站,依靠AJAX調用來加載不同的部分,因爲用戶登錄和交互。後端全部使用PHP。據我所知,我掌握了所有的工作,但不知何故,在網上坐幾個星期的過程中,一些隨機的事情都停止了。黑客攻擊?只是錯誤?我不知道。當我部署它時,此功能已經過充分測試和功能。

我在Firefox和Chrome中暫時測試它。

首先:我有幾個表單,根據用戶的選擇,在提交時加載其他表單。在最後一個表格的末尾還有一個提交按鈕。他們都使用POST(這是我的問題嗎?太多提交功能/ AJAX調用併發運行?)。

如果我在頁面上,請打開控制檯,然後複製/粘貼代碼以便以此方式運行,它的運行方式與其應該完全相同。

當我在它的OWN文件中包含代碼時,它包裝在一個$(document).ready(function() {它失敗,在日誌中沒有任何警告或錯誤。

如果我在.JS文件中與JS的其餘部分一起使用,它也會失敗並且沒有任何信息。它不防止默認(所以它是讓表單提交),因此刷新頁面(因爲行動='')。

我無法真正製作一個JS小提琴,它沒有結合大量不同文件的HTML和模擬表單輸入,但不幸的是無法登錄訪問。

在此先感謝您的任何見解!

+0

是否動態創建元素$('#take_att')'?你確定腳本是從js文件執行 –

+0

你可以在dom就緒處理程序中添加一些控制檯日誌語句,如'console.log('form',$('#take_att')。' –

+0

$('# take_att')是一個通過AJAX加載的表單,表單本身在PHP文件(也處理數據)中被硬編碼,但所有可能的輸入(帶標籤的單選按鈕和隱藏字段)都是動態創建的。 – LouisK

回答

2

有原因,因爲你說表格是通過ajax加載的,所以你需要使用event delegation。由於當您的DOM準備好處理程序被觸發時,通過ajax加載表單,表單可能尚未加載到DOM,因此選擇器$('#take_att')可能不會返回任何元素,因此提交處理程序不會附加到表單。

jQuery(function ($) { 
    $(document).on('submit', '#take_att', function (e) { 
     e.preventDefault(); 

     $.ajax({ 
      url: 'tools/attendance.php', 
      type: 'POST', 
      data: $('#take_att').serialize(), 
      success: function (data) { 
       $('#controls').empty(); 
       $('#controls').append(data); 
      } 
     }); 
    }); 
}) 
+0

那麼,因爲這個表單在最初加載文檔時不是DOM的一部分,它不能直接作爲目標嗎?我需要針對包含它的div? – LouisK

+0

謝謝!這很有道理。我從來沒有這樣想過。你的解決方案完美:) – LouisK