浅谈ajax请求不同页面的微信JSSDK问题


Posted in Javascript onFebruary 26, 2018

问题场景:

我在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问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
关于实现代码语法标亮 dp.SyntaxHighlighter
Feb 02 Javascript
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
Sep 08 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
Jun 21 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
Oct 10 Javascript
使用javascript为网页增加夜间模式
Jan 26 Javascript
js用闭包遍历树状数组的方法
Mar 19 Javascript
JavaScript中的数学运算介绍
Dec 29 Javascript
初步了解javascript面向对象
Nov 09 Javascript
jQuery+ajax+asp.net获取Json值的方法
Jun 08 Javascript
ReactNative页面跳转实例代码
Sep 27 Javascript
vue-cli webpack 引入jquery的方法
Jan 10 jQuery
vue2.0使用swiper组件实现轮播的示例代码
Mar 03 Javascript
详解Node 定时器
Feb 26 #Javascript
node.js基础知识小结
Feb 26 #Javascript
Es6 Generator函数详细解析
Feb 24 #Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
Feb 24 #Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
Feb 24 #Javascript
JS抛物线动画实例制作
Feb 24 #Javascript
浅谈VUE监听窗口变化事件的问题
Feb 24 #Javascript
You might like
php dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
Session的工作机制详解和安全性问题(PHP实例讲解)
2014/04/10 PHP
11个PHPer必须要了解的编程规范
2014/09/22 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
php实现微信和支付宝支付的示例代码
2020/08/11 PHP
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
Python生成pdf文件的方法
2014/08/04 Python
python实现简单socket通信的方法
2016/04/19 Python
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
python批量图片处理简单示例
2019/08/06 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
酒店员工职业生涯规划
2014/02/25 职场文书
文秘档案管理岗位职责
2014/03/06 职场文书
竞赛口号大全
2014/06/16 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
pytorch 使用半精度模型部署的操作
2021/05/24 Python
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
mysql sql常用语句大全
2022/06/21 MySQL