好几个小时前,拿到任务分配,实现一个交互。
任务是这样的:A,B两个页面,都是独立运行展示出来的。
老大给了我两个思路,我思考后总结为:
1.A页面点击后,后台改变一个状态码,B页面一定时间循环读取后台对应数据,某一次循环中发现状态码被改变,页面效果显示。
2.用长链接实现实时交互,就是说A页面点击按钮1后发送数据给B页面,B页面接受数据后展示效果.
思路1
现在呢,感脚思路1很好实现,因为是要在钉钉上面做这玩意,然后我打开钉钉开发文档:
dd.httpRequest
向指定服务器发起一个跨域 http(s) 请求。
加一段官方示例代码:
dd.httpRequest({
url: 'http://httpbin.org/post',
method: 'POST',
data: {
from: '钉钉',
production: 'Dingtalk',
},
dataType: 'json',
success: function(res) {
dd.alert({content: 'success'});
},
fail: function(res) {
dd.alert({content: 'fail'});
},
complete: function(res) {
dd.hideLoading();
dd.alert({content: 'complete'});
}
});
A页面用这个改变状态码,B用这个方法获取状态码,但是B要用一个定时循环函数:
setTimeout(function () {
//要延时执行的代码
}, 1000) //延迟时间 这里是1秒
使用递归来决定函数的循环执行。
赶脚嘞个方法有点不太合适,那就再看看另外的一个思路。
思路2
呐,因为是新手,这个长链接是个啥玩意不知道,所以现在一步步慢慢来。
先去搜索了Java Web 的长连接,说是可以一定时间内一直建立连接,可以交互数据,嗯,看到了个例子说是网页聊天一样,反正没看太懂。就知道了有个WebScoket,但是不会吖。
然后,又搜索了一下简单demo,找到了一个。效果图如下:
自己跟着实现了一遍,但是并没有多加深入理解,只是稍微改了一下能够实现两个不同的页面完成demo的效果。
现在先去搜索一下小程序里面的webscoket看看。
经过一番周折,发现之前看的demo,完全可以套用在钉钉移动端上面,业务逻辑也差不多,基本效果已经可以实现了。
//ws的JS
var stompClient = null;
window.onload=function (){
var socket = new SockJS('/endpointSang');
stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
console.log('Connected:' + frame);
stompClient.subscribe('/topic/getResponse', function (response) {
showResponse(JSON.parse(response.body).responseMessage);
})
});
}
function sendName() {
var name = "小伙子,泥中了5000W,快醒来去领奖";
console.log('name:' + name);
stompClient.send("/welcome", {}, JSON.stringify({'name': name}));
}
//ws2的JS
var stompClient = null;
window.onload=function (){
var socket = new SockJS('/endpointSang');
stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
console.log('Connected:' + frame);
stompClient.subscribe('/topic/getResponse', function (response) {
showResponse(JSON.parse(response.body).responseMessage);
})
});
}
function disconnect() {
if (stompClient != null) {
stompClient.disconnect();
}
setConnected(false);
console.log('Disconnected');
}
function showResponse(message) {
alert(message);
}
网友评论