2013-06-27 25 views
1

我已經內$(document).ready()定義的函數外部函數可組織一些JSON到使用HTML DoT.js:呼叫從阿賈克斯()函數成功

$(document).ready(function() { 
    function arrangeResults(jsonObject, templateFunc) { 
     $(jsonObject).each(function(i, item) { 
      $.each(item, function(i2, item2) { 
      $('#ajax-article-list .col-left').append(templateFunc(item2)); 
      }); 
     }); 
    }; 

我在頁面加載一個AJAX調用它執行此功能顯示數據:

$.post(ajaxRequestURL, function(data) { 
    arrangeResults(ajaxData.pages, projectTemplate); 
} 

,這工作正常。

但是我有一套它要求使用click()處理程序,它應與返回的數據再次執行arrangeResults更多/不同的JSON數據鏈接,但不執行的功能:

$('nav.filters a').click(function(ev) { 
    ev.preventDefault(); 
    $.post(ajaxRequestURL, function(data) { 
     ajaxData = parseJSON(data); 
     arrangeResults(ajaxData.pages, projectTemplate); 
    } 
} 

這並未沒有工作。這些數據都是有效的,並且如果我將arrangeResults的內容直接放在腳本中,所有內容都可以正常工作,但是我希望遵循DRY並具有一個外部函數,我可以在頁面加載和當其中一個過濾器被點擊。

我想這是因爲AJAX調用是異步的,但由於函數調用在success內,我推測這不會導致問題。

回答

1

如果我理解正確,那麼您在$(document).ready()塊內部有第一個AJAX調用。
所以這可能是因爲您在$(document).ready()區塊內有arrangeResults函數。因此,您無法從JScript的其他部分調用該函數。 定義它是這樣的:

function arrangeResults(jsonObject, templateFunc) { 
     ... 
    } 
    $(document).ready(function() { 
     ... 
    ); 

等等。 如果我錯了,請糾正我。

+0

謝謝,這與在$(document).ready()之外定義模板函數一樣簡單。 – melat0nin