首頁  >  文章  >  web前端  >  在ajax請求不同頁面的微信JSSDK出現的一些問題?

在ajax請求不同頁面的微信JSSDK出現的一些問題?

亚连
亚连原創
2018-06-04 15:54:071656瀏覽

下面我就為大家分享一篇淺談ajax請求不同頁面的微信JSSDK問題,具有很好的參考價值,希望對大家有所幫助。

問題場景:

我在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 &#39;<input type = "hidden" name = "print_str" id = "print_str" value="&#39;.$hex_str.&#39;"/ >&#39;;
echo &#39;<input type = "hidden" name = "device_id" id = "device_id" value="&#39;.$device_ID.&#39;"/ >&#39;;
?>

由原本跳轉頁面列印改成非同步請求列印,實際上,從微信傳送資料給裝置還是在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輸出內容會重置頁面內容,至於其他回呼函數會不會有興趣可以自己看一下。

上面是我整理給大家的,希望今後對大家有幫助。

相關文章:

淺談Vue-cli單一檔案元件引入less,sass,css樣式的不同方法

解決vue-cli建立專案的loader問題

用vue寫一個仿簡書的輪播圖的範例程式碼

#

以上是在ajax請求不同頁面的微信JSSDK出現的一些問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn