【发布时间】:2017-11-02 07:02:54
【问题描述】:
我刚开始在我的 node.js-server 上使用 socket.io。每当我通过单击按钮向服务器发出发布请求时,我只想发出一个事件。问题是当我加载页面时该事件已经被发出,然后将再次每两分钟发出一次。为什么会发生这种情况,我该如何防止这种情况发生?我只想在单击按钮后触发一次事件。
server.js
const express = require('express')
const app = express()
const server = require('http').createServer(app)
const io = require('socket.io')(server)
app.post('/event', function (req, res, next) {
console.log('emit event')
io.emit('event')
})
app.use(express.static(__dirname + '/public'))
server.listen(8085)
index.html
<html>
<body>
<div class="container">
</div>
<button type="submit" id="fire">Fire!</button>
<script src="/socket.io/socket.io.js"></script>
<script src="jquery-3.2.1.js"></script>
<script src="index.js"></script>
</body>
</html>
index.js
$('#fire').on('click', function () {
console.log('fire!')
$.ajax({
url: '/event',
method: 'POST'
}).done(function (data) {
console.log('done')
alert(data)
}).fail(function (data) {
console.log('fail')
alert(data)
})
})
$(function () {
var socket = io.connect('http://localhost:8085')
var container = $('.container')
socket.on('event', function (bcevent) {
console.log('got event')
var newItem = '<p>EVENT</p>'
container.append(newItem)
})
var jqxhr = $.post('/event', function () {
// alert( "success" );
})
.done(function () {
// alert( "second success" );
})
.fail(function () {
// alert( "error" );
})
.always(function () {
// alert( "finished" );
})
})
非常感谢您的时间和努力。
【问题讨论】:
-
看起来您正在向服务器执行 POST 请求。删除 'var jqxhr = ...' 行,它应该可以按预期工作。
-
页面加载时不再发出事件。但是每当我单击按钮并等待两分钟时,服务器就会再次发出事件。
标签: javascript jquery node.js sockets