您好,登錄后才能下訂單哦!
問題場景:
我在A頁面有一個表單內容需要使用藍牙打印機打印,填完表單信息,并通過ajax請求發送到 B文件(PHP)中處理信息,正常通過form表單跳轉到B頁面后,是可以打印出來的,因為B頁面中除了處理 數據的PHP之外還混合了 JS代碼,也就是JSSDK部分。然而通過ajax請求發送過去,則無響應,所有jssdk除了wx.ready和wx.config之外都無法執行。(A.B兩個文件都有wx.config,wx.ready配置)
比如發送數據的參數:
wx.invoke('sendDataToWXDevice',data,function(res){ //微信提供的接口,只有這么一個回調函數,如果通過ajax請求,則無法進入回調函數 if(res.err_msg=='sendDataToWXDevice:ok') { alert("打印成功"); window.history.go(-1); } else { alert("打印失敗"); } });
于是我就猜測,通過請求PHP文件,返回的數據包含了我的B頁面JS代碼部分,也就是說,A頁面有wx.config和wx.ready,B頁面返回的內容也有這兩個接口,為了排除這個問題,
我把B頁面的所有微信接口全部去掉了。只剩下處理完表單需要發送的內容保存在一個input中。
//返回 處理后的數據 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.'"/ >'; ?>
由原本跳轉頁面打印改成異步請求打印,實際上,從微信發送數據給設備還是在A頁面執行,B文件只是負責返回由A傳給B并通過加密處理的數據,所以,刪掉B文件中所有混寫的html和JS代碼,其中要注意的是config配置中是否包含 beta:true屬性,因為涉及到硬件SDK需要,并且接口列表參數中是否也填寫上了要用到的硬件SDK接口
我當時覺得我的想法是正確的。但是我每次在wx.invoke包括openWXDeviceLib,sendDataToWXDevice等的 回調函數中用document.write寫下返回的結果,但是我很快發現每次wx.invoke后面的輸出都不執行了,而且我原本頁面的內容也被清空了,此時我還沒意識到這個問題,還是不斷測試,直到我在invoke之前輸出了由B頁面返回的數據(以上document.write內容都是我在請求成功后的success回調函數輸出的),我才意識到,我要發送的數據,在我執行invoke方法的時候,已經變成了undefind,我才恍然發現,我的頁面原本內容被清空了(因為之前是跳轉到B頁面打印,所以本身就是一片空白,~ ~,習慣了,沒發現變化),后來我改用alert輸出,就可以正常打印了,也就是說 JQUERY的ajax封裝的回調函數中,用document.write輸出,會重置頁面內容(我之所以用document.write來輸出的原因是,之前測試某個階段中,原本作為調試的config是通過alert窗口彈出信息的,但是不知道為何他卻以document.write的形式寫在了頁面上。我現在已經忘了當時是什么情況,所以才會導致這個錯誤,不過也算是知道了JQ的這個問題)
謹記:JQuery的ajax的success回調函數中用document.write輸出內容會重置頁面內容,至于其他回調函數會不會有興趣可以自己看一下。
以上這篇淺談ajax請求不同頁面的微信JSSDK問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。