websocket 协议使用stomp+sockjs 框架的时候建立长连接,点击按钮一次,发送数据会执行很多次
题目描述
websocket 协议使用sockjs + stomp框架,点击一次按钮执行send()操作,执行发送很多次,
代码如下:
var stompClient = null;
var sessionId;
function connect() {
var socket = new SockJS('/websocket');
stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
sessionId = socket._transport.url.split("/")[5];
init();
stompClient.subscribe('/gateway/confirmationPrompt-' + sessionId, function (data) { //卖家收到卖家买入信息
var response = jQuery.parseJSON(data.body);
var data1 = 180
var id = setInterval(frame, 1000);
function frame() {
if (data1 == 0) {
clearInterval(id);
} else {
data1--
$('#receivedBtn').one("click", function () { //卖家确认已收到
stompClient.send("/ws/c2c/trade", {}, JSON.stringify({
'Tag': 21001,
'requestID': '123456789',
'userID': $.cookie('UserId'),
'tradeId': response.Banklist.TradeId,
}));
clearInterval(id);
})
$('#appealBtn').click(function () { //我要申诉(卖家)
clearInterval(id);
alert('已申诉')
$('#sellStatusModal').modal('hide')
})
$('#timeData1').text(data1)
if ($('#timeData1').text() == 0) {
stompClient.send("/ws/c2c/trade", {}, JSON.stringify({ //卖家超时自动确认
'Tag': 21001,
'requestID': '123456789',
'userID': $.cookie('UserId'),
'tradeId':response.Banklist.TradeId,
}));
$('#sellerTimeOutModal').modal('show')
setTimeout(function () {
$("#sellerTimeOutModal").modal("hide")
$('#sellStatusModal').modal('hide')
}, 1200);
}
}
}
//
})
});
}
connect();
function init() {
stompClient.send("/ws/c2c/home", {}, JSON.stringify({
'RequestID': 'testtesttest',
'UserID': $.cookie('UserId'),
'Token': null,
}));
}
function confirm() {
stompClient.send("/ws/c2c/entrust", {}, JSON.stringify({ //确认
"Tag": 20489,
'UserID': $.cookie('UserId'),
tradeId: $('#modalTradeId').text()
}));
}
我在点击按钮执行
stompClient.send("/ws/c2c/trade", {}, JSON.stringify({ ...
这段的时候,每次会执行很多次,无论是否使用倒计时,而且执行的次数会累加
如下图:
需求:
希望点击一次按钮只执行一次发送动作
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论