2017-06-01 5 views
1

と簡単なコンソールログを含むjs関数をトリガーしようとしています。残念なことに、この機能は6回だけトリガし、しばらくの間フリーズします。 1〜2分後、「凍った時間」の間にクリックされたボタンのすべてが一度にトリガーされます。それは、ボタンを6回押すといつも起こります。Nodejs、express、Ajax:関数はnodejsを使用して簡単に6回起動します。

のindex.html - >ボタン
クライアントサイド - Ajaxのポスト機能に
server.jsをトリガー> jqueryの機能 - >は、コンソール・ログ

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

}); 

私は間違っていますか?どのように私のコードを改善することができますヒント?

はあなたが

+2

あなたのサーバーが応答しない可能性があります。万が一Chromeでこれをテストしていますか? Chromeはホスト名に対して6つの同時リクエストを許可します。だから6の後、ブラウザはあなたのリクエストをもっとブロックします。あなたのserver.jsファイルで、 'console.log(...)'の行の後に 'res.send(200)'を呼び出そうとしています。 – dan

+0

server.jsモジュールで、あなたが戻ることを確認してください。 res.send( '車の運転が始まります') –

+0

あなたのクライアントで。jsの良い習慣は、クリックした後にボタンを無効にしてから、Ajax呼び出しで成功または失敗のいずれかを有効にすることです。 –

答えて

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では、1つのサーバーに対して最大6つの同時リクエストしか許可されません。 6に達すると、ブラウザは残りのリクエストをキューに入れます。

あなたはそれがしばらくの後に自分自身を修正する理由は、要求のタイムアウトのためです。要求がタイムアウトすると(応答を受信しなかったため)、ブラウザは接続を終了します。

ブラウザホストの制限あたりの同時リクエスト - https://stackoverflow.com/a/985704/4774345

+0

偉大な答えと説明!クロムが6時にすべての発信リクエストを停止したとは考えていませんでした。 – JonLuca

+0

これが修正されました。ありがとうございました。明らかにするには:Chromeでは6つの同時リクエストしか許可されませんが、サーバの応答後にこの番号が再び0になりますか? – Preprocezzor

+0

@Preprocezzorはい。サーバーが要求に応答するたびに、ブラウザーはそのサーバーへの接続を閉じます。 – dan

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

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

あなたは非同期にそれを送信する必要がありがとう。

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 
    } 
}); 
関連する問題