最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

解決ajax請(qǐng)求后臺(tái),有時(shí)收不到返回值的問題

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:51:25
文檔

解決ajax請(qǐng)求后臺(tái),有時(shí)收不到返回值的問題

解決ajax請(qǐng)求后臺(tái),有時(shí)收不到返回值的問題:昨天下午做項(xiàng)目遇到一個(gè)問題,貼出來方便以后翻閱,也給大家個(gè)參考。 問題: 具體做的是個(gè)文件導(dǎo)入的功能,導(dǎo)入的功能是成功了,但是界面一直得不到返回值,排查了一下午,調(diào)試的時(shí)候是可以有返回的,但是關(guān)掉瀏覽器調(diào)試界面,卻得不到返回結(jié)果。 原因: 一直
推薦度:
導(dǎo)讀解決ajax請(qǐng)求后臺(tái),有時(shí)收不到返回值的問題:昨天下午做項(xiàng)目遇到一個(gè)問題,貼出來方便以后翻閱,也給大家個(gè)參考。 問題: 具體做的是個(gè)文件導(dǎo)入的功能,導(dǎo)入的功能是成功了,但是界面一直得不到返回值,排查了一下午,調(diào)試的時(shí)候是可以有返回的,但是關(guān)掉瀏覽器調(diào)試界面,卻得不到返回結(jié)果。 原因: 一直

昨天下午做項(xiàng)目遇到一個(gè)問題,貼出來方便以后翻閱,也給大家個(gè)參考。

問題:

具體做的是個(gè)文件導(dǎo)入的功能,導(dǎo)入的功能是成功了,但是界面一直得不到返回值,排查了一下午,調(diào)試的時(shí)候是可以有返回的,但是關(guān)掉瀏覽器調(diào)試界面,卻得不到返回結(jié)果。

原因:

一直以為是我后臺(tái)程序有問題,晚上回到家才想起來ajax的問題,把a(bǔ)jax的異步處理改為同步,就出來效果了,具體的原因請(qǐng)看下文詳解。

jquery中ajax方法有個(gè)屬性async用于控制同步和異步,默認(rèn)是true,即ajax請(qǐng)求默認(rèn)是異步請(qǐng)求,有時(shí)項(xiàng)目中會(huì)用到AJAX同步。這個(gè)同步的意思是當(dāng)JS代碼加載到當(dāng)前AJAX的時(shí)候會(huì)把頁(yè)面里所有的代碼停止加載,頁(yè)面出現(xiàn)假死狀態(tài),當(dāng)這個(gè)AJAX執(zhí)行完畢后才會(huì)繼續(xù)運(yùn)行其他代碼頁(yè)面假死狀態(tài)解除。而異步則這個(gè)AJAX代碼運(yùn)行中的時(shí)候其他代碼一樣可以運(yùn)行。

ajax中async這個(gè)屬性,用于控制請(qǐng)求數(shù)據(jù)的方式,默認(rèn)是true,即默認(rèn)以異步的方式請(qǐng)求數(shù)據(jù)。

一、async值為true (異步)

當(dāng)ajax發(fā)送請(qǐng)求后,在等待server端返回的這個(gè)過程中,前臺(tái)會(huì)繼續(xù) 執(zhí)行ajax塊后面的腳本,直到server端返回正確的結(jié)果才會(huì)去執(zhí)行success,也就是說這時(shí)候執(zhí)行的是兩個(gè)線程,ajax塊發(fā)出請(qǐng)求后一個(gè)線程 和ajax塊后面的腳本(另一個(gè)線程)

$.ajax({ 
 type:"POST", 
 url:"Venue.aspx?act=init", 
 dataType:"html", 
 success:function(result){ //function1()
 f1(); 
 f2(); 
 } 
 failure:function (result) { 
 alert('Failed'); 
 }, 
 } 
 function2();

在上例中,當(dāng)ajax塊發(fā)出請(qǐng)求后,他將停留function1(),等待server端的返回,但同時(shí)(在這個(gè)等待過程中),前臺(tái)會(huì)去執(zhí)行function2()。

二、async值為false (同步)

當(dāng)執(zhí)行當(dāng)前AJAX的時(shí)候會(huì)停止執(zhí)行后面的JS代碼,直到AJAX執(zhí)行完畢后時(shí),才能繼續(xù)執(zhí)行后面的JS代碼。

$.ajax({ 
 type:"POST", 
 url:"Venue.aspx?act=init", 
 dataType:"html", 
 async: false,
 success:function(result){ //function1()
 f1(); 
 f2(); 
 } 
 failure:function (result) { 
 alert('Failed'); 
 }, 
 } 
 function2(); 

當(dāng)把a(bǔ)syn設(shè)為false時(shí),這時(shí)ajax的請(qǐng)求時(shí)同步的,也就是說,這個(gè)時(shí)候ajax塊發(fā)出請(qǐng)求后,他會(huì)等待在function1()這個(gè)地方,不會(huì)去執(zhí)行function2(),直到function1()部分執(zhí)行完畢。

Ajax同步與異步的區(qū)別

var returnValue = null; 
xmlhttp = createXmlHttp(); 
xmlhttp.onreadystatechange = function() { 
 if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
 if (xmlhttp.responseText == "true") { 
 returnValue = "true"; 
 } 
 else { 
 returnValue = "false"; 
 } 
 } 
}; 
xmlhttp.open("Post",url,true); //異步傳輸 
xmlhttp.setRequestHeader("If-Modified-Since","0"); //不緩存Ajax
xmlhttp.send(sendStr); 
return returnValue;
在異步時(shí)才可以用xmlHttpReq.onreadystatechange狀態(tài)值!下面是異步和同步的不同調(diào)用方式:

xmlHttpReq.open("GET",url,true);//異步方式
 xmlHttpReq.onreadystatechange = showResult; //showResult是回調(diào)函數(shù)名
 xmlHttpReq.send(null);
function showResult(){ 
 if(xmlHttpReq.readyState == 4){ 
 if(xmlHttpReq.status == 200){
 ******
 }
 }
}
xmlHttpReq.open("GET",url,false);//同步方式 
 xmlHttpReq.send(null); 
 showResult(); //showResult雖然是回調(diào)函數(shù)名但是具體用法不一樣~ 
function showResult(){ 
 //if(xmlHttpReq.readyState == 4){ 這里就不用了,直接dosomething吧~ 
 //if(xmlHttpReq.status == 200){ 
 ******//dosomething 
 //} 
 //} 
}
xmlhttp.open("Post",url,true);

如果是同步(false),返回值是true或false,因?yàn)閳?zhí)行完send后,開始執(zhí)行onreadystatechange,程序會(huì)等到onreadystatechange都執(zhí)行完,取得responseText后才會(huì)繼續(xù)執(zhí)行下一條語句,所以returnValue一定有值。

如果是異步(true),返回值一定是null,因?yàn)槌绦驁?zhí)行完send后不等xmlhttp的響應(yīng),而繼續(xù)執(zhí)行下一條語句,所以returnValue還沒有來的及變化就已經(jīng)返回null了。

所有如果想獲得xmlhttp返回值必須用同步,異步無法得到返回值。

同步異步使用xmlhttp池時(shí)都要注意:取得xmlhttp時(shí)只能新建xmlhttp,不能從池中取出已用過的xmlhttp,因?yàn)楸皇褂眠^的xmlhttp的readyState為4,所以同步異步都會(huì)send但不執(zhí)行onreadystatechange。

以上這篇解決ajax請(qǐng)求后臺(tái),有時(shí)收不到返回值的問題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

解決ajax請(qǐng)求后臺(tái),有時(shí)收不到返回值的問題

解決ajax請(qǐng)求后臺(tái),有時(shí)收不到返回值的問題:昨天下午做項(xiàng)目遇到一個(gè)問題,貼出來方便以后翻閱,也給大家個(gè)參考。 問題: 具體做的是個(gè)文件導(dǎo)入的功能,導(dǎo)入的功能是成功了,但是界面一直得不到返回值,排查了一下午,調(diào)試的時(shí)候是可以有返回的,但是關(guān)掉瀏覽器調(diào)試界面,卻得不到返回結(jié)果。 原因: 一直
推薦度:
標(biāo)簽: 處理 的時(shí)候 問題
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top