javascript 自訂回呼函數,javascript回呼函數

來源:互聯網
上載者:User

javascript 自訂回呼函數,javascript回呼函數

javascript 回呼函數



如果你直接在函數a裡調用的話,那麼這個回呼函數就被限制死了。但是使用函數做參數就有下面的好處:當你a(b)的時候函數b就成了回呼函數,而你還可以a(c)這個時候,函數c就成了回呼函數。如果你寫成了functiona(){...;b();}就失去了變數的靈活性。


function a(index,callback){

    callback(index);    
}

function b(index){
    alert(index);
}

a(10000,b);
什是JavaScript中的回呼函數,作用是什?

var req;
function validate() {
var idField = document.getElementById("userid");
var url = "Validate.jsp?id=" + encodeURI(idField.value);
init();
req.open("GET", url, true);
req.onreadystatechange = callback;
//callback就是回呼函數,當觸發req.onreadystatechange時,調用callback擷取url傳回的東西
req.send(null);
}

function init() {
if(window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
}

function callback() {
if(req.readyState == 4) { //反饋回到用戶端
if(req.status == 200) { //反饋完全正常
//alert(req.responseText);
var msg = req.responseXML.getElementsByTagName("msg")[0];
//alert(msg);
setMsg(msg.childNodes[0].nodeValue);
}
}
}

function setMsg(msg) {// 頁面中的span <span id="usermsg"></span>
//alert(msg);
mdiv = document.getElementById("usermsg");
if(msg == "invalid") {
mdiv.innerHTML = "<font color='red'>username exists</font>";
} else {
mdiv.innerHTML = "<font color='green'>congratulations! you can use this username!</font>";
}
}

Validate.jsp

<%
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-store"); //HTTP1.1
response.setHeader("Pragma", &quo......餘下全文>>
 
對於javascript的回呼函數同步問題

首先javascript指令碼是線性執行的
<javascript>
運算A
運算B
運算C
</javascript>
執行了"A"才會執行B,然後才會執行C
之所以出現你說的非同步現象。是因為你調用BMap.Map類getPoint是個ajax
這個ajax是一個http請求。不受javascript程式執行的限制
因為。getPoint就跳出了這個javascript指令碼。自己去執行了,而指令碼繼續下一個語句alert(d1)
因此-----------
function(point){
if (point) {
map.centerAndZoom(point, 16);
map.addOverlay(new BMap.Marker(point));
d1=point.lng;
}
}
----------------------
這個ajax反回後才執行的方法。並沒有工作
所以d1沒有=point.lng
如果象得到ajax請求後的d1結果
請在
d1=point.lng;後面加入:
alert(d1);
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.