溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

淺談ajax請求不同頁面的微信JSSDK問題

發(fā)布時間:2020-09-12 05:35:12 來源:腳本之家 閱讀:228 作者:heartOfblack 欄目:web開發(fā)

問題場景:

我在A頁面有一個表單內(nèi)容需要使用藍牙打印機打印,填完表單信息,并通過ajax請求發(fā)送到 B文件(PHP)中處理信息,正常通過form表單跳轉(zhuǎn)到B頁面后,是可以打印出來的,因為B頁面中除了處理 數(shù)據(jù)的PHP之外還混合了 JS代碼,也就是JSSDK部分。然而通過ajax請求發(fā)送過去,則無響應(yīng),所有jssdk除了wx.ready和wx.config之外都無法執(zhí)行。(A.B兩個文件都有wx.config,wx.ready配置)

比如發(fā)送數(shù)據(jù)的參數(shù):

wx.invoke('sendDataToWXDevice',data,function(res){
  //微信提供的接口,只有這么一個回調(diào)函數(shù),如果通過ajax請求,則無法進入回調(diào)函數(shù)
 if(res.err_msg=='sendDataToWXDevice:ok')
 {
  alert("打印成功");
  window.history.go(-1);
 }
 else
 {
  alert("打印失敗");
 } 
 });

于是我就猜測,通過請求PHP文件,返回的數(shù)據(jù)包含了我的B頁面JS代碼部分,也就是說,A頁面有wx.config和wx.ready,B頁面返回的內(nèi)容也有這兩個接口,為了排除這個問題,

我把B頁面的所有微信接口全部去掉了。只剩下處理完表單需要發(fā)送的內(nèi)容保存在一個input中。

//返回 處理后的數(shù)據(jù)
echo '<input type = "hidden" name = "print_str" id = "print_str" value="'.$hex_str.'"/ >';
echo '<input type = "hidden" name = "device_id" id = "device_id" value="'.$device_ID.'"/ >';
?>

由原本跳轉(zhuǎn)頁面打印改成異步請求打印,實際上,從微信發(fā)送數(shù)據(jù)給設(shè)備還是在A頁面執(zhí)行,B文件只是負責(zé)返回由A傳給B并通過加密處理的數(shù)據(jù),所以,刪掉B文件中所有混寫的html和JS代碼,其中要注意的是config配置中是否包含 beta:true屬性,因為涉及到硬件SDK需要,并且接口列表參數(shù)中是否也填寫上了要用到的硬件SDK接口

我當(dāng)時覺得我的想法是正確的。但是我每次在wx.invoke包括openWXDeviceLib,sendDataToWXDevice等的 回調(diào)函數(shù)中用document.write寫下返回的結(jié)果,但是我很快發(fā)現(xiàn)每次wx.invoke后面的輸出都不執(zhí)行了,而且我原本頁面的內(nèi)容也被清空了,此時我還沒意識到這個問題,還是不斷測試,直到我在invoke之前輸出了由B頁面返回的數(shù)據(jù)(以上document.write內(nèi)容都是我在請求成功后的success回調(diào)函數(shù)輸出的),我才意識到,我要發(fā)送的數(shù)據(jù),在我執(zhí)行invoke方法的時候,已經(jīng)變成了undefind,我才恍然發(fā)現(xiàn),我的頁面原本內(nèi)容被清空了(因為之前是跳轉(zhuǎn)到B頁面打印,所以本身就是一片空白,~ ~,習(xí)慣了,沒發(fā)現(xiàn)變化),后來我改用alert輸出,就可以正常打印了,也就是說 JQUERY的ajax封裝的回調(diào)函數(shù)中,用document.write輸出,會重置頁面內(nèi)容(我之所以用document.write來輸出的原因是,之前測試某個階段中,原本作為調(diào)試的config是通過alert窗口彈出信息的,但是不知道為何他卻以document.write的形式寫在了頁面上。我現(xiàn)在已經(jīng)忘了當(dāng)時是什么情況,所以才會導(dǎo)致這個錯誤,不過也算是知道了JQ的這個問題)

謹記:JQuery的ajax的success回調(diào)函數(shù)中用document.write輸出內(nèi)容會重置頁面內(nèi)容,至于其他回調(diào)函數(shù)會不會有興趣可以自己看一下。

以上這篇淺談ajax請求不同頁面的微信JSSDK問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI