我正在使用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”不存在。任何人都知道如何做到这一点?
答案 0 :(得分:1)
是的,我第一次误解了这个问题。回到这里,回调:
您已经通过" request.done"进行了某种回调。方法。如果你想运行像你建议的功能,你可以这样做:
function ajaxGetTopicRatings(myCallback) {
//code code code
if (myCallback && typeof(myCallback) === "function") {
myCallback();
}
}
然后你可以打电话给...
ajaxGetTopicRatings(function () { setTopicsSpans() });
这将确保" setTopicsSpans"只有在" ajaxGetTopicRatings"中调用之后才会运行。
(确保正确输入函数名称,而不是原始问题:" ...但是当我输入例如" setTopicsSpans"在函数ajaxGetTopicRatings中(setTopicSpans)我得到一个错误的..." )
在函数的末尾添加这样的回调,仍不能保证它将是最后一个运行的东西。在你的例子中,最后运行的东西很可能是" 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();
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
答案 1 :(得分:1)
在我看来,你的例子在正常情况下应该可以正常工作(即没有未解决的引用)。
但我建议您改为使用$.getJSON()
,或者在dataType: 'json'
的选项对象参数中设置$.ajax()
而不是contentType
,因为您可能错误地将其中一个用于{{1}}其他在这里。