簡體   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