<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        解決ajax請求后臺,有時收不到返回值的問題

        來源:懂視網 責編:小采 時間:2020-11-27 22:51:25
        文檔

        解決ajax請求后臺,有時收不到返回值的問題

        解決ajax請求后臺,有時收不到返回值的問題:昨天下午做項目遇到一個問題,貼出來方便以后翻閱,也給大家個參考。 問題: 具體做的是個文件導入的功能,導入的功能是成功了,但是界面一直得不到返回值,排查了一下午,調試的時候是可以有返回的,但是關掉瀏覽器調試界面,卻得不到返回結果。 原因: 一直
        推薦度:
        導讀解決ajax請求后臺,有時收不到返回值的問題:昨天下午做項目遇到一個問題,貼出來方便以后翻閱,也給大家個參考。 問題: 具體做的是個文件導入的功能,導入的功能是成功了,但是界面一直得不到返回值,排查了一下午,調試的時候是可以有返回的,但是關掉瀏覽器調試界面,卻得不到返回結果。 原因: 一直

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

        問題:

        具體做的是個文件導入的功能,導入的功能是成功了,但是界面一直得不到返回值,排查了一下午,調試的時候是可以有返回的,但是關掉瀏覽器調試界面,卻得不到返回結果。

        原因:

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

        jquery中ajax方法有個屬性async用于控制同步和異步,默認是true,即ajax請求默認是異步請求,有時項目中會用到AJAX同步。這個同步的意思是當JS代碼加載到當前AJAX的時候會把頁面里所有的代碼停止加載,頁面出現假死狀態,當這個AJAX執行完畢后才會繼續運行其他代碼頁面假死狀態解除。而異步則這個AJAX代碼運行中的時候其他代碼一樣可以運行。

        ajax中async這個屬性,用于控制請求數據的方式,默認是true,即默認以異步的方式請求數據。

        一、async值為true (異步)

        當ajax發送請求后,在等待server端返回的這個過程中,前臺會繼續 執行ajax塊后面的腳本,直到server端返回正確的結果才會去執行success,也就是說這時候執行的是兩個線程,ajax塊發出請求后一個線程 和ajax塊后面的腳本(另一個線程)

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

        在上例中,當ajax塊發出請求后,他將停留function1(),等待server端的返回,但同時(在這個等待過程中),前臺會去執行function2()。

        二、async值為false (同步)

        當執行當前AJAX的時候會停止執行后面的JS代碼,直到AJAX執行完畢后時,才能繼續執行后面的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(); 

        當把asyn設為false時,這時ajax的請求時同步的,也就是說,這個時候ajax塊發出請求后,他會等待在function1()這個地方,不會去執行function2(),直到function1()部分執行完畢。

        Ajax同步與異步的區別

        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;
        在異步時才可以用xmlHttpReq.onreadystatechange狀態值!下面是異步和同步的不同調用方式:
        
        xmlHttpReq.open("GET",url,true);//異步方式
         xmlHttpReq.onreadystatechange = showResult; //showResult是回調函數名
         xmlHttpReq.send(null);
        function showResult(){ 
         if(xmlHttpReq.readyState == 4){ 
         if(xmlHttpReq.status == 200){
         ******
         }
         }
        }
        xmlHttpReq.open("GET",url,false);//同步方式 
         xmlHttpReq.send(null); 
         showResult(); //showResult雖然是回調函數名但是具體用法不一樣~ 
        function showResult(){ 
         //if(xmlHttpReq.readyState == 4){ 這里就不用了,直接dosomething吧~ 
         //if(xmlHttpReq.status == 200){ 
         ******//dosomething 
         //} 
         //} 
        }
        xmlhttp.open("Post",url,true);

        如果是同步(false),返回值是true或false,因為執行完send后,開始執行onreadystatechange,程序會等到onreadystatechange都執行完,取得responseText后才會繼續執行下一條語句,所以returnValue一定有值。

        如果是異步(true),返回值一定是null,因為程序執行完send后不等xmlhttp的響應,而繼續執行下一條語句,所以returnValue還沒有來的及變化就已經返回null了。

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

        同步異步使用xmlhttp池時都要注意:取得xmlhttp時只能新建xmlhttp,不能從池中取出已用過的xmlhttp,因為被使用過的xmlhttp的readyState為4,所以同步異步都會send但不執行onreadystatechange。

        以上這篇解決ajax請求后臺,有時收不到返回值的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        解決ajax請求后臺,有時收不到返回值的問題

        解決ajax請求后臺,有時收不到返回值的問題:昨天下午做項目遇到一個問題,貼出來方便以后翻閱,也給大家個參考。 問題: 具體做的是個文件導入的功能,導入的功能是成功了,但是界面一直得不到返回值,排查了一下午,調試的時候是可以有返回的,但是關掉瀏覽器調試界面,卻得不到返回結果。 原因: 一直
        推薦度:
        標簽: 處理 的時候 問題
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 日韩精品免费一线在线观看| 亚洲日本VA午夜在线影院| 国产精品免费久久久久久久久 | 久久久久久噜噜精品免费直播| 久久亚洲精品人成综合网| 自怕偷自怕亚洲精品| 男人的天堂av亚洲一区2区| 久久美女网站免费| 久久久久亚洲AV成人无码| 无套内谢孕妇毛片免费看看| 成人永久免费高清| 九九全国免费视频| 亚洲一区精品无码| 99久久久国产精品免费牛牛 | 中文亚洲AV片不卡在线观看| 99re6在线视频精品免费| 日本成人在线免费观看| 黄页网站在线视频免费| 国产啪亚洲国产精品无码| 免费人成网站在线观看不卡 | 国产aⅴ无码专区亚洲av| 久久亚洲中文字幕无码| 亚洲第一视频在线观看免费| 亚洲狠狠婷婷综合久久| 亚洲国产高清在线一区二区三区| 一级午夜a毛片免费视频| 亚洲AV无码久久寂寞少妇| 日韩免费一区二区三区在线| 亚洲嫩模在线观看| 和日本免费不卡在线v| 国产精品亚洲а∨天堂2021| 成人人免费夜夜视频观看| 亚洲欧洲日韩国产综合在线二区| 国产香蕉免费精品视频| 国产精品亚洲专区在线播放| 亚洲精品亚洲人成人网| 久久久久免费视频| 亚洲 欧洲 自拍 另类 校园| 青青草免费在线视频| 九九免费久久这里有精品23| 亚洲精品福利网泷泽萝拉|