在Javascript 中,特別是在AJAX中,回調(diào)函數(shù)常常是一個(gè)函數(shù)名,沒(méi)有地方放入?yún)?shù),如下面的AJAX代碼,在成功后將調(diào)用回調(diào)函數(shù)callback,但callback是有參數(shù)的,如何把參數(shù)傳進(jìn)來(lái)呢?

株洲ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
var callback = function(p1){
//do something
}
var ajaxSetting = {
url: url,
timeout:me.timeout,
type: method,
contentType: "application/json",
dataType: "json",
cache: false,
async: async,
data: p_data,
success: callback
},
error: function(p_request, p_status, p_err) {
}
};
解決的辦法是利用匿名函數(shù):
success: function(result){
callback(p1_actual);
}
其中pa_actual是已知的參數(shù),可以是function類型。
直接submit整個(gè)頁(yè)面都刷新了。
要想有回調(diào)函數(shù)的話,可以采用異步提交的方法。
如jQuery.json(url,params,function call(data){
//這里寫回調(diào)處理內(nèi)容。data是返回的數(shù)據(jù)
},"json")。
url是提交表單路徑。params是提交的表單參數(shù)。data是返回的數(shù)據(jù),"json"指定返回格式是json,具體的請(qǐng)參考jQuery api
【function】
在JavaScrip中,function是內(nèi)置的類對(duì)象,也就是說(shuō)它是一種類型的對(duì)象,可以和其它String、Array、Number、Object類的對(duì)象一樣用于內(nèi)置對(duì)象的管理。因?yàn)閒unction實(shí)際上是一種對(duì)象,它可以“存儲(chǔ)在變量中,通過(guò)參數(shù)傳遞給(別一個(gè))函數(shù)(function),在函數(shù)內(nèi)部創(chuàng)建,從函數(shù)中返回結(jié)果值”。
因?yàn)閒unction是內(nèi)置對(duì)象,我們可以將它作為參數(shù)傳遞給另一個(gè)函數(shù),延遲到函數(shù)中執(zhí)行,甚至執(zhí)行后將它返回。
【回調(diào)函數(shù)】
回調(diào)函數(shù)來(lái)自一種著名的編程范式——函數(shù)式編程,在基本層面上,函數(shù)式編程指定的了函數(shù)的參數(shù)。
回調(diào)函數(shù)被認(rèn)為是一種高級(jí)函數(shù),一種被作為參數(shù)傳遞給另一個(gè)函數(shù)(在這稱作"otherFunction")的高級(jí)函數(shù),回調(diào)函數(shù)會(huì)在otherFunction內(nèi)被調(diào)用(或執(zhí)行)。回調(diào)函數(shù)的本質(zhì)是一種模式(一種解決常見問(wèn)題的模式),因此回調(diào)函數(shù)也被稱為回調(diào)模式。
js在回調(diào)函數(shù)內(nèi),修改外部變量的方法常用async參數(shù)。
代碼舉例如下:
var async = require('async');
function get_time_line() {
var list = []; // List 不能為一個(gè)空數(shù)組,不然循環(huán)個(gè)屁啊
var getValue = function(li,oneDone){
// li.key 是你每個(gè)數(shù)組元素中的參數(shù),你自己改吧
db.hget(li.key, 'time_line', function(err, reply) {
// 存到每個(gè)元素里去
li['newValue'] = reply;
// 做好了
oneDone()
});
}
async.each(lists,getValue,function(err,result){
if (!err) {
// 全都抓完了,輸出最后有newValue的list
console.log(lists);
// do sth. else
}
});
};
以上是node.js中最常用的修改內(nèi)部變量的方法。
簡(jiǎn)單,很多方法都定義了回調(diào)函數(shù),回調(diào)函數(shù)也是函數(shù),就是說(shuō)不管怎么傳,只需要是個(gè)函數(shù)類型即可。寫法如下。
方式1,
doAjax(參數(shù)1,參數(shù)2,function(request,opts){
callback(request,opts,agrs);
});
function callback(request,opts,args){
};
方式2,
var args=N;
doAjax(參數(shù)1,參數(shù)2,function(request,opts){
var X=N;
回調(diào)函數(shù)代碼塊..
和以上幾乎一樣,看個(gè)人編碼方式選擇。
});
function doAjax(u,param,callback){
$.ajax({
type:'POST',
url:u,
data:param,
success:callback
});
}
function showAlert(data,test1,test2){
alert(data+" "+test1+" "+test2);
}
window.onload = doAjax("server.php","id=12type=1",function(data){showAlert(data,3,5)});
執(zhí)行doAjax的時(shí)候,回調(diào)函數(shù)的調(diào)用改一下就可以了。
測(cè)試過(guò)沒(méi)問(wèn)題。
網(wǎng)頁(yè)標(biāo)題:javascript回調(diào)函數(shù),javascript回調(diào)函數(shù)能不能修改外部變量
網(wǎng)站URL:http://chinadenli.net/article29/dsigsch.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、虛擬主機(jī)、網(wǎng)頁(yè)設(shè)計(jì)公司、微信公眾號(hào)、靜態(tài)網(wǎng)站、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)