我在$(document).ready()
中定义了一个函数,它使用DoT.js将一些JSON排列成HTML:
$(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()
处理程序请求更多/不同的JSON数据,该处理程序应该使用返回的数据再次执行arrangeResults
,但该函数不会执行:
$('nav.filters a').click(function(ev) {
ev.preventDefault();
$.post(ajaxRequestURL, function(data) {
ajaxData = parseJSON(data);
arrangeResults(ajaxData.pages, projectTemplate);
}
}
这不起作用。这些数据都是有效的,如果我将arrangeResults
的内容直接放在脚本中,一切都有效,但是我希望能够关注DRY并拥有一个外部函数,我可以在页面加载时调用它们。单击其中一个过滤器。
我想这是因为AJAX调用是异步的,但由于函数调用在success
内,我认为这不会导致问题。
答案 0 :(得分:1)
如果我理解正确的话,你会在$(document).ready()
块内首次进行AJAX调用
因此,可能是因为您在$(document).ready()
块中有 arrangeResults 功能。因此,您无法从JScript的其他部分调用该函数。
像这样定义:
function arrangeResults(jsonObject, templateFunc) {
...
}
$(document).ready(function() {
...
);
等等。 如果我错了,请纠正我。