2011-06-07 53 views
2

如何逐个执行jQuery代码? 我要先做“功能1”,完成工作时。然后做“功能2”...如何逐个执行jQuery代码?

谢谢。

<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    $(document).ready(function(){ 
    //function 2, jqeury.ajax 
    }); 
    $(document).ready(function(){ 
    //function 3, jqeury.json 
    }); 
    $('#col').load("home.html"); 
    //function 4, jqeury.load 
    }); 
}); 
</script> 
<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    //function 1, a jquery slider plungin 
}); 
</script> 
+0

你可以给我们更多的代码,省去了多文档就绪功能,你不必多次听文档。因此,保持父文档准备就绪,向我们展示函数2和3的内涵,通常当你有这样的匿名jquery函数时,可以在函数调用后使用逗号来调用下一个函数。 – 2011-06-07 12:21:00

+0

默认情况下,一切都会按顺序运行,除非另有规定 - 例如异步加载ajax。 – 472084 2011-06-07 12:22:59

+0

可能的重复:http://stackoverflow.com/questions/6251228/load-sequentially-instead-of-at-the-same-time-with-jquery/ – marcosfromero 2011-06-07 12:23:16

回答

9

你不需要这么多的文档准备好的调用。一个就足够了

如果你的意思是你希望在你接收到你正在进行的AJAX调用的响应之后调用每个方法,请将代码放在回调中;

$(document).ready(function(){ 
    one(); //call the initial method 
}); 

function one(){ 
    $.get('url', {}, function(data){ 
     two(); //call two() on callback 
    }) 
} 

function two(){ 
    $.getJSON('url', {}, function(data){ 
     three(); //ditto 
    }) 
} 

function three(){ 
    $('#selector').load('url'); 
} 

该文档

http://api.jquery.com/jQuery.get/

http://api.jquery.com/jQuery.getJSON/

http://api.jquery.com/load/

-1

使用setTimeout功能

function f1(para) { 
    // ... 
    // do work; 
    setTimeout(f2, 10); 
} 

function f2() { 
    // ... 
    // do work 
    setTimeout(f3, 10); 
} 
+0

setTimeout是一个不好的解决方案。您不能保证ajax调用在下一次setTimeout到期并执行之前完成。这会导致竞赛状况。 – Stephen 2011-06-07 12:30:40

-1
<script type="text/javascript"> 

jQuery(document).ready(function(){ 
    function2(){ //declare what function 2 will do here 
    //function 2, jqeury.ajax 
    } 
    function3(){ 
    //function 3, jqeury.json 
    } 
    $('#col').load("home.html"); 
    //function 4, jqeury.load 
    }); 
}); 
</script> 
<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    //function 1, a jquery slider plungin 

    function2(); // execute function 2 after 1 
    function3(); 
}); 
</script> 
+0

函数2和函数3不会在发射之前等待到服务器的异步调用完成。 – Stephen 2011-06-07 12:31:37

+0

@stephen如果我想等待每篇文章完成,我不会使用异步。 afaik有一个选项可以关闭 – gen 2011-06-07 12:37:08

+0

这是真的:如果你想锁定浏览器直到解决同步请求。 http://www.hunlock.com/blogs/Snippets:_Synchronous_AJAX – Stephen 2011-06-07 12:48:24

0

它看起来像你正在做三个AJAX调用。由于jQuery的1.5,我们现在已经从阿贾克斯呼叫Deferred object(技术上jqXHR对象)返回,这样你就可以像这样把它们连:

$(function() { // this is a document ready function. it's all you need. 
    $.ajax(/* your ajax specs */).done(function() { 
     $.getJSON('somepath').done(function() { 
      $('#container').load('etc.'); 
     }); 
    }); 
}); 
2

而不是使用一个以上的document.ready()的使用回拨功能下面。

<script type="text/javascript"> 
function ajaxfun() { 
    //function 2, jqeury.ajax 
    //in ajax callback call the jsonfun(); 
} 
function jsonfun(){ 
    //function 3, jqeury.json 
    //after json function add the next function in it callback. 
} 
</script> 
<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    //function 1, a jquery slider plungin 
    //Call ajaxfun() here to execute second. 
}); 
</script>