2012-02-14 60 views
0

我正在使用jquery .html()通過調用REST url動態地添加一些標記,但它不起作用。jquery .html()不工作

<div style="display: none;" id="tables"> 
    <form:select id="table" name="table" path="table">  
     <form:option value="">Choose</form:option> 
     <div id="tables-select"> 
     <!-- The available tables for update will be added here --> 
     </div> 
    </form:select> 
    <script type="text/javascript"> 
     function getTables(type) { 
      $.getJSON('/web/tables/db/' + type, 
      { 
       ajax : 'true' 
      },function(data) { 
      html =''; 
      var len = data.length; 
      for (var i=0; i<len; i++) { 
       html += '<option value="'+data[i]+'" >'+data[i]+'</option>'; 
      } 
      $('#tables-select').html(html); 
      }); 
     } 
    </script> 
</div> 

我看到REST調用正在進行,但沒有任何事情發生。 調試並放置中斷點後,我看到java腳本直接從第10行跳轉到java腳本函數結束(第20行)。

任何想法這裏發生了什麼? 我在我的頁面中有大量的相同類型的函數,並且所有這些工作都期待這個。

編輯:

這是怎麼了調用該函數

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $("#type").live('change', function(){ 
      var type = $(this).val(); 
      getSites(type); 
      getTabless(type); 
     }); 
    }); 
</script> 
+4

請縮進您的代碼以使其更具可讀性。謝謝。 – 2012-02-14 14:20:36

+0

請不要在你的代碼中包含行號,它會弄亂格式。 – 2012-02-14 14:21:13

+1

在第15行放置一個斷點。如果您沒有擊中該點,那麼AJAX呼叫無法正常工作。 – arb 2012-02-14 14:21:51

回答

1

既然這樣,這個代碼是錯誤的:有一個爲getTables()缺少右括號。另外,我假設你有一些代碼,實際上調用getTables(),否則此代碼除了聲明一個函數什麼都不做。

調試時,$.getJSON調用確實會很快執行。 AJAX的全部目的是它是異步。因此,調試器將跳過$.getJSON調用而不輸入回調,因爲稍後會調用回調。如果你在回調中放置了一個斷點,那麼它應該被觸發。

整個<DIV>的款式爲display:none。除非你在某個地方調用$('#tables').show()或以其他方式使其可見,否則結果將永遠不可見,除了在DOM中,或通過類似螢火蟲的工具。

此外,您不能將<DIV>標記放入<SELECT>標記中。對tables-select元素使用<OPTGROUP>標記,或者替換<SELECT>元素的全部內容,包括初始「選擇」選項。

+0

是的,我確實在調用getTables()的頁面頂部有一個函數,正如我所說的,REST調用正常並且我在瀏覽器中看到了結果,此後調試器跳到最後一行函數。缺失的大括號是一個錯字。 – tazo 2012-02-14 15:35:37

+0

調試器將**跳到該函數的最後一行,因爲回調是異步的。 – 2012-02-14 15:59:20

+0

刪除ajax true會使它成爲同步呼叫嗎? – tazo 2012-02-14 16:19:23