我正在使用jquery并试图使某些功能相互触发。以下内容似乎正确吗?我几乎在一个函数中调用一个函数。
$j = jQuery.noConflict();
var obj;
var items = new Array();
$j(document).ready(function() {
function setTopicsSpans() {
// do stuff
//.....
}
function ajaxGetTopicRatings() {
var request = $j.ajax({
url: "json.php",
type: "GET",
data: {"items": items},
cache: true,
contentType: 'application/json; charset=utf-8',
});
request.done(function(data) {
//console.log(data);
obj = jQuery.parseJSON(data);
setTopicsSpans();
});
//......
}
function setTopicsArray() {
$j('[data-tid]').each(function() {
items.push(this.getAttribute('data-tid'));
});
ajaxGetTopicRatings();
}
setTopicsArray();
});
现在,我读了一些有关回调函数的内容。但是,当我在函数ajaxGetTopicRatings(setTopicSpans)中放入例如“ setTopicsSpans”时,出现一个错误:该函数“ setTopicsSpans”不存在。有人知道如何执行此操作吗?
最佳答案
是的,我一开始就完全没读懂这个问题。回调函数:
您已经通过“ request.done”方法使用了某种回调。如果要运行建议的功能,可以执行以下操作:
function ajaxGetTopicRatings(myCallback) {
//code code code
if (myCallback && typeof(myCallback) === "function") {
myCallback();
}
}
那你可以打电话给...
ajaxGetTopicRatings(function () { setTopicsSpans() });
这将确保“ setTopicsSpans”在“ ajaxGetTopicRatings”中被调用之前不会运行。
(确保输入正确的函数名称,而不是原始问题:“ ...但是当我在ajaxGetTopicRatings(setTopicSpans)函数中放入例如“ setTopicsSpans”时,我得到了错误提示。”)
在函数的末尾添加这样的回调仍然不能保证它将是最后运行的事情。在您的示例中,最后运行的代码很可能是“ request.done()”,因为代码不会等待。这可能是驻留回调的好地方。
我在下面的代码片段中添加了一个小的函数调用顺序示例。
function test1CB1(myCallback) {
document.write('test1 CB1 hit<br/>');
myCallback();
}
function test1CB2(myCallback) {
document.write('test1 CB2 hit<br/>');
myCallback();
}
function test1CB3() {
document.write('test1 CB3 hit<br/><br/>');
test2();
}
function test2CB1() {
document.write('test2 CB1 hit<br/>');
}
function test2CB2() {
document.write('test2 CB2 hit<br/>');
}
function test2CB3() {
document.write('test2 CB3 hit<br/>');
}
function test2() {
document.write('Standard behaviour - inner most function gets called first<br/>');
test2CB1(test2CB2(test2CB3()));
}
document.write('Functions fire after each other using callbacks<br/>');
test1CB1(function() {
test1CB2(function() {
test1CB3();
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>