2009-03-31 11 views
4

jQueryを使用してPHPスクリプトを常時実行し、毎秒レスポンスを取得し、マウスの小さなビットを同じスクリプトに送信するにはどうすればよいですか?jQueryは常にAjaxレスポンスのためにpingを実行します

本当にこのような単純なタイマーを動作させるためには、ランダムな拡張機能を追加する必要がありますか?

+0

レスポンスを2回目にするのは少し余計ですが、少なくともこれを15秒に変更できますか? – alex

答えて

0

ランダムな拡張子を追加する必要はありません。設定インターバルで何かをするためのネイティブなjavascript関数setInterval and setTimeoutがあります。あなたはおそらくちょうどmousedown上の変数でデータを保存し、それを提出することはおそらく十分であろう、あなたが本当にpingを毎秒をしたい場合は、一方

function ajaxPing() { 
    ... 
} 

setInterval("ajaxPing()", 1000); 

$(element).mousedown(ajaxPing); 

ような何かをしたいと思います次のpingで(これは1秒未満で起こります)。あなたが関数内でサーバーをpingするためのコードを置くことができる

0

、このような何か:あなたがしたくない場合は

setInterval('ping()',1000); //this will ping 1000 milliseconds or 1 second 
1
function doAjax(data){ 
    $.ajax({ 
    type: "POST", 
    data: data, 
    url: 'http://example.com/yourscript.php', 
    }); 
} 
// Set interval 
setInterval('doAjax()',1000); 
// Set event handler 
$(document).mousedown(function(){ 
    doAjax({key: 'value'}); 
}); 

をあなたは、実際の要素に$(文書)を置き換えることができますページ全体のクリックをキャプチャします。あなたは、コールバックなどを探している場合は、Ajaxの機能をより多くを行うことができます

http://docs.jquery.com/Ajax/jQuery.ajax

24

を反復するためには、神を再帰し、ヒトです。それは明らかではない場合には
-L. Peter Deutsch

var req = function() { 
    $.ajax({ 
     url : 'http://example.com/yourscript.php', 
     complete : function() { 
      req(); 
     } 
    }); 
}; 
req(); 

、上記は永遠に、とすぐ前の1が完了すると、新しい要求を行います。次のようにも要求の間に1秒の遅延を設定できます

var req = function() { 
    $.ajax({ 
     url : 'http://example.com/yourscript.php', 
     complete : function() { 
      setTimeout(function() { 
       req(); 
      }, 1000); 
     } 
    }); 
}; 
req(); 
+0

これは1秒に数回発生し、負荷をかけてサーバーをダウンさせます –

+0

2番目のバージョンを追加する前にdownvotedと推測します。基本的な考え方は、1秒に1回だけポーリングするのではなく、コールバックを使用することです。 –

+2

そして、とにかく、それは毎秒多くの要求をしません。一度に1つのリクエストを行います。 1リクエストが完了したら、次のリクエストを行います。だから、あなたはあなたのdownvoteを元に戻す必要がありますか? –

1

//あなたが必要とするすべてのpingは:

ping.pushCallback(function() { YourCallback(); }); 
$.data(document.body, 'data_ping', ping); 

// -------------- ---------------------------------------- //スクリプト

$.ping = function(url, options) { 
    this.url = url; 
    this.options = $.extend({ 
     delay: 2000, 
     dataType: 'json', 
     timeout: 10000, 
     data: {}, 
     callbacks: [] 
    }, options); 
    this.queue(); 
}; 
$.ping.prototype = { 
    queue: function() { var self = this; 
     setTimeout(function() { 
      self.send(); 
     }, self.options.delay); 
    }, 
    send: function() { var self = this; 
     $.ajax(self.url, { 
      success: function(data) { 
       for (var i in self.options.callbacks) { 
        self.options.callbacks[i](data); 
       } 
      }, 
      complete: function() { 
       self.queue(); 
      }, 
      dataType: self.options.dataType, 
      data: self.options.data, 
      type: "GET", 
      cache: false, 
      timeout: self.options.timeout 
     }); 
    }, 
    setData: function(key, value) { 
     this.options.data[key] = value; 
    }, 
    pushCallback: function(callback) { 
     this.options.callbacks.push(callback); 
    } 
}; 
関連する問題