浅谈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 相关文章推荐
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
Nov 26 Javascript
JavaScript中rem布局在react中的应用
Dec 09 Javascript
jQuery中的Deferred和promise 的区别
Apr 03 Javascript
JS中的==运算: [''] == false —&gt;true
Jul 24 Javascript
浅谈JavaScript中的this指针和引用知识
Aug 05 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
Jan 13 Javascript
jQuery实现广告条滚动效果
Aug 22 jQuery
js字符限制(字符截取) 一个中文汉字算两个字符
Sep 12 Javascript
JavaScript 中使用 Generator的方法
Dec 29 Javascript
详解vue组件中使用路由方法
Feb 12 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
Mar 29 Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
Jul 23 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数据类型的总结分析
2013/06/13 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
PHP弹出对话框技巧详细解读
2015/09/26 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
利用node实现一个批量重命名文件的函数
2017/12/21 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
webpack4 optimization使用总结
2019/11/10 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
浅谈Python爬取网页的编码处理
2016/11/04 Python
Python 模拟购物车的实例讲解
2017/09/11 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
Linux常见面试题
2016/10/04 面试题
长辈证婚人证婚词
2014/01/09 职场文书
探亲假请假条
2014/04/11 职场文书
生日庆典策划方案
2014/06/02 职场文书
调研座谈会发言材料
2014/08/23 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
中学团支部工作总结
2015/08/13 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript