Javascript 使功能相互依赖

Javascript 使功能相互依赖,javascript,jquery,Javascript,Jquery,我正在使用jquery,我正在尝试创建一些函数,以便在彼此之后启动。以下是正确的吗。我基本上是在函数中调用函数 $j=jQuery.noConflict(); var-obj; var items=新数组(); $j(文档).ready(函数(){ 函数setTopicsSpans(){ //做事 //..... } 函数ajaxGetTopicRatings(){ var请求=$j.ajax({ url:“json.php”, 键入:“获取”, 数据:{“项目”:项目}, 是的, conte

我正在使用jquery,我正在尝试创建一些函数,以便在彼此之后启动。以下是正确的吗。我基本上是在函数中调用函数

$j=jQuery.noConflict();
var-obj;
var items=新数组();
$j(文档).ready(函数(){
函数setTopicsSpans(){
//做事
//.....
}
函数ajaxGetTopicRatings(){
var请求=$j.ajax({
url:“json.php”,
键入:“获取”,
数据:{“项目”:项目},
是的,
contentType:'application/json;charset=utf-8',
});                    
请求完成(功能(数据){
//控制台日志(数据);
obj=jQuery.parseJSON(数据);
setTopicsSpans();
});
//......
}
函数setTopicsArray(){
$j('[data tid]')。每个(function(){
items.push(this.getAttribute('data-tid');
});
ajaxGetTopicRatings();
}
setTopicsArray();

});对,我第一次去的时候就完全误解了这个问题。下面是回调:

您已经通过“request.done”方法使用了某种回调。如果您想运行您建议的功能,可以执行以下操作:

function ajaxGetTopicRatings(myCallback) {
    //code code code

    if (myCallback && typeof(myCallback) === "function") {
        myCallback();
    }
}
然后你可以打电话过来

ajaxGetTopicRatings(function () { setTopicsSpans() });
这将确保在“AjaxGetTopicsSpans”中调用“setTopicsSpans”之前不会运行它

(确保输入的函数名正确,而不是原来的问题:“……但当我在函数AjaxGetTopicsPans(setTopicSpans)中输入例如“setTopicsSpans”时,我得到了一个错误…”

在函数末尾添加这样的回调仍然不能保证它将是最后运行的。在您的示例中,最后运行的最有可能是“request.done()”,因为代码不会等待它。这可能是回调驻留的好地方

我在下面的代码片段中添加了一个函数调用顺序的小示例

函数test1CB1(myCallback){
document.write('test1cb1hit
'); myCallback(); } 函数test1CB2(myCallback){ document.write('test1cb2命中
'); myCallback(); } 函数test1CB3(){ document.write('test1cb3hit

'); test2(); } 函数test2CB1(){ document.write('test2cb1hit
'); } 函数test2CB2(){ document.write('test2 CB2 hit
'); } 函数test2CB3(){ document.write('test2 CB3 hit
'); } 函数test2(){ write('标准行为-首先调用最内部的函数
'; test2CB1(test2CB2(test2CB3()); } document.write('Functions使用回调函数相互触发
'); test1CB1(函数(){ test1CB2(函数(){ test1CB3(); }); });
在我看来,您的示例在正常情况下应该可以正常工作(即不会有未解析的引用)


但是我建议您改用
$.getJSON()
,或者在
$.ajax()
的options对象参数中设置
数据类型:“json'
,而不是
contentType
,因为您可能在这里把一个错当成了另一个。

我怀疑拼写错误是由于名称
setTopic*s*Span*s*
混乱造成的。确保您始终使用正确数量的S(3)。感谢您的解释。我将测试您的代码片段。谢谢你!它是每个函数中的第一个参数。将调用包装到anon.函数中的原因是,它不会首先执行(因为在没有此功能的情况下调用它意味着)。您可以通过在ajaxGetTopicRating中添加一个函数,然后通过参数调用该函数(不使用anon.函数)来实现同样的目的。我希望这是有道理的。你可以在这里读到更多:我看到你编辑了你的评论,但我还是会留下我的评论(尽管它不再有意义了,呵呵)谢谢你,我在思考和打字的同时:)感谢你的跟进