2011-06-07 63 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>