質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

6302閲覧

Ajaxで一定間隔をあけてポーリングする方法

mosa

総合スコア218

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

2クリップ

投稿2018/05/28 09:26

いつもありがとうございます。

JavascriptとJQueryにおいて、ajaxでポーリングのようなことをしたい場合、どのように記述するのが最もベターでしょうか。
要件は以下の2つを満たすものです。

1.初回はすぐに実行
2.その後はajaxでのレスポンスが返ってきた後、一定間隔をおいて次を実行

以下のような記述しか思いつかないのですが、あまりスマートでないように感じます。

Javascript

1$(function(){ 2 func(); 3}); 4 5function loop(){ 6 setTimeout(function(){ func() }, 1000); 7} 8 9function func(){ 10 $.getJSON('/path/to/ajax', function(json){ 11 console.log(json); 12 loop(); 13 }); 14}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/05/28 09:29

もう少し用途を具体的に書かれた方が良いかと思います。また「スマートでない」と判断された理由もあわせて記述してください。
guest

回答2

0

ベストアンサー

少しモダンな書き方で回答させていただきます。ESのバージョンは多分2015だと思います。

js

1$(() => poll()); 2async function poll() { 3 try { 4 const response = await $.getJSON("path/to/ajax"); 5 console.log(response); 6 } catch (e) { 7 console.error(e); 8 } finally { 9 setTimeout(poll, 1000); 10 } 11} 12

見て分かる通り、あまり違わないのでmosaさんのコードは素直で間違っていないと思います。
注意すべき点は、getJSONが失敗した場合を考慮していないこと(pollingが止まってしまう)でしょうか。
あと$.getJSONがESのPromiseを返すのか自信がないので自分で調べてみてください。

投稿2018/05/28 10:20

keroxp

総合スコア114

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mosa

2018/05/29 00:10

ありがとうございます。なぜ低評価がついているのか疑問です。
guest

0

javascript

1 2$(function(){ 3 func(); 4 setInterval(function(){func();},1000); 5}); 6function func(){ 7 $.getJSON('/path/to/ajax', function(json){ 8 console.log(json); 9 }); 10}

投稿2018/05/28 09:53

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mosa

2018/05/29 00:01

ありがとうございます。setInterval だと、ajaxのレスポンスが遅くなった場合、多重実行されてしまうかと思います。結果、要件の「2.」を満たさなくなってしまいます。ただ、それを言ったら私のコードも初回と2回目は重なる可能性がありますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問