在使用Jquery的時候,用到Callback(),回調函數的概念。而且很多。
比如:
$.ajax({ url:"test.json", type: "GET", data: {username:$("#username").val()}, dataType: "json", beforSend:function(){ // 禁用按鈕防止重復提交 $("#submit").attr({ disabled: "disabled" }); }, complete:function(msg){ //請求完成后調用的回調函數(請求成功或失敗時均調用) } , error:function(msg){ //請求失敗時被調用的函數 } , Sucess:function(msg){ //請求成功后調用的回調函數 } });
回調函數大家都會用,只是Jquery封裝了之后,不能讓大家明白回調函數的真正使用。
JS Api 里這樣解釋:A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.
當然我們可以在JS當中來真正嘗試一下回調函數的神奇。
如果你直接在函數a里調用的話,那么這個回調函數就被限制死了。但是使用函數做參數就有下面的好處:當你a(b)的時候函數b就成了回調函數,而你還可以a(c)這個時候,函數c就成了回調函數。如果你寫成了function a(){...;b();}就失去了變量的靈活性。下面是代碼:
<html>
<head>
<title>回調函數(callback)</title>
<script language="javascript" type="text/javascript">
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
function a(callback) {
alert("我是parent函數a!");
alert("調用回調函數");
//callback();
$("#id").load("page參數");
d();
alert(callback);
}
function b(){
alert("我是回調函數b");
$("#id").load("page參數");
e();
}
function c(){
alert("我是回調函數c");
$.ajax({
...
});
d();
}
function test() {
a(b);
a(c);
}
$(document).ready(function(){
function d(){
alert("我是Jquery定義的函數");
}
var e = function(){
alert("我也是Jquery定義的函數")
}
}
</script>
</head>
<body>
<h1>學習js回調函數</h1>
<button onClick=test()>click me</button>
<p>應該能看到調用了兩個回調函數</p>
</body>
</html>
估計大家也看到了,我在a(callback),b(),c()方法里都寫了Jquery的ajax函數,注意,這里是ajax的函數。是有區別的,我分別調用了內置函數,和自己定義的函數。
區別就在這里,因為Jquery和JS用的callback是一樣的,互通的,所以在這里,Jquery的內置函數會被調用了。
但是自己定義的函數是不會被識別的,甚至會報沒有這個function.
(后面這段看得不是很理解,希望看到的高手請分析下)
所以在回調的時候注意這點。