我剛開始在我的node.js-server上使用socket.io。每當我通過點擊一個按鈕向服務器發送一個請求時,我只想發出一個事件。問題是,當我加載頁面時,事件已經被髮射,然後每隔兩分鐘再發射一次。爲什麼會發生這種情況,我該如何防止這種情況?我只想讓事件在點擊按鈕後觸發一次。如何防止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 = ...'行,它應該按預期工作。 – n32303
該事件不會在頁面加載時發出。但是每當我點擊按鈕並等待兩分鐘,服務器就會再次發出事件。 –