低版本webview无法请求jquery ajax
大家好,我是烤鴨:
 ?? ?又來踩坑了。
1.?? ?場景復現
 ?? ?有反饋我們的H5頁面,無法正確顯示頁面。就類似下圖這樣,ajax沒法請求到數據。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
 ?? ?之前測試的時候是在web端做的測試,用安卓7.0和8.0的手機都試了一下,是沒有問題的。
 ?? ?后來借到一臺小米3(4年前的機型?)搭載的是安卓5.0吧,確實出現這個問題了。(后臺收不到請求,估計是js報錯)
 ?? ?由于不能看到哪里報錯,只能一點點刪代碼,看是哪個地方不兼容。
2.?? ?猜測問題
 ?? ?2.1?? ?使用sessionStorage,可能是低版本安卓不支持sessionStorage
? ? 2.2?? ?使用h5的函數(location.toString())不支持,目的是獲取瀏覽器地址欄
var s = location.toString();? ?2.3?? ?ajax方法有問題,代碼如下:
?//獲取該手機最新訂單function getLatestOrder(){$.ajax( { ? ?url : prefix+'/getLatestOrder',// 跳轉到 action ? ?data:{ ? ?'mobile' : mobile}, ? ?type:'post', ? ?cache:false, ? ?dataType:'json', ? ?//跨域dataType:'jsonp', ??jsonp : 'callback',success : function(data) {console.log(data);if (data.code == "100") {window.location.reload();} else {//錯誤提示console.log(data.msg);}},error : function() {alert("異常!");}});}
 ?? ?后來一點點排查,2.2導致請求無法發出,改掉location函數之后,發現后臺可以收到請求(返回值正常),但是頁面沒有收到返回值,是2.3的問題。
3?? ?解決方式
 ?? ?將jquery的ajax改為原生的ajax,比如上面的方法改為
? ?xhrAjax.js
function xhrAjax(type, url, data, success, failed){?? ?// 創建ajax對象var xhr = null;if(window.XMLHttpRequest){xhr = new XMLHttpRequest();} else {xhr = new ActiveXObject('Microsoft.XMLHTTP')}var type = type.toUpperCase();// 用于清除緩存var random = Math.random();if(typeof data == 'object'){var str = '';for(var key in data){str += key+'='+data[key]+'&';}data = str.replace(/&$/, '');}if(type == 'GET'){if(data){xhr.open('GET', url + '?' + data, true);} else {xhr.open('GET', url + '?t=' + random, true);}xhr.send();} else if(type == 'POST'){xhr.open('POST', url, true);// 如果需要像 html 表單那樣 POST 數據,請使用 setRequestHeader() 來添加 http 頭。xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");xhr.send(data);}// 處理返回數據xhr.onreadystatechange = function(){if(xhr.readyState == 4){if(xhr.status == 200){success(xhr.responseText);} else {if(failed){failed(xhr.status);}}}} }4.?? ?總結
 因為這個app其他頁面也用過jq的ajax,很難想象是jquery的問題。
 由于改的急,沒有嘗試更多的方案。
 后來看了一個帖子,讓安卓按照上面的重新給我打個包。
https://blog.csdn.net/u013540324/article/details/64573785
還是不行,也是后臺可以收到請求(返回值正常),但是頁面沒有收到返回值。
 雖然知道怎么處理了,但是還是無法解釋為什么,mark一下,給有相同問題的朋友提個醒。
總結
以上是生活随笔為你收集整理的低版本webview无法请求jquery ajax的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: css权重核心概念
- 下一篇: 简单的学习心得:网易云课堂Android
