Nodejs,express,Ajax:函数只触发六次

时间:2017-06-01 12:38:59

标签: javascript jquery node.js ajax

使用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');

});

我做错了什么?有关如何改进代码的任何提示?

谢谢

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

sendStatus details

好的做法是在点击后禁用按钮,然后在响应回来后启用它:

//禁用按钮

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

答案 2 :(得分:1)

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

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

您需要异步发送。