繁体   English   中英

Node.js,Express,Ajax:函数仅触发六次

[英]Nodejs, express, Ajax: Function triggers only Six Times

使用nodejs表示我正在尝试触发一个包含简单控制台日志的js函数。 可悲的是,该功能仅触发6次并冻结了一段时间。 一两分钟后,所有的按钮单击都会立即触发,在“冻结时间”内单击该按钮。 它总是在按下按钮6次后发生。

index.html->按钮
客户端->触发Ajax发布函数的jquery函数
server.js->包含express函数,该函数触发控制台日志

的index.html

<input type="button" id="car" value="drive"/>

clientside.js

$('#car').click(function(){

   $.ajax({
      type:'POST',
      url: url + '/drive'
   });

});

server.js

var app = express();

app.post('/drive', function(req, res){

   console.log('Car starts driving');

});

我究竟做错了什么? 有什么技巧可以改善我的代码吗?

谢谢

您的服务器需要响应该请求。 尝试将服务器更新为:

var app = express();

app.post('/drive', function(req, res){

   console.log('Car starts driving');
   res.sendStatus(200)

});

这将对所有请求返回200 OK。

为什么在6个请求后会发生这种情况? 我猜您正在使用Chrome或Firefox。 Chrome和Firefox仅允许最多6个并发请求到单个服务器。 达到6后,浏览器将把其余请求排队。

一段时间后看到它修复的原因是由于请求超时。 一旦请求超时(因为没有收到响应),浏览器将关闭连接。

每个主机的浏览器并发请求限制-https: //stackoverflow.com/a/985704/4774345

您的服务器代码应返回语句:

app.post('/drive', function(req, res){
   console.log('Car starts driving');
   res.sendStatus(sendStatus)
});

sendStatus详细信息

好的做法是在单击后禁用该按钮,然后在响应返回后将其启用:

//禁用按钮

$.ajax({
    url: url + '/drive'        
    type: 'POST',        
    data: {},
    success: function(data){
        //Enable button
    },
    error: function(data){
        //Enable button
    }
});
$('#car').click(function(){

   $.ajax({
      type:'POST',
      async : true,
      url: url + '/drive'
   });

您需要异步发送它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM