0

複数のajaxリクエストがあり、そのうちの1つが必要なデータを取得できない場合は、データを取得できるようになるまで再送信します。データを取得した後、停止できないという問題。ajaxに休憩やそれに相当するものはありますか?clearintervalを試しましたが、機能しませんでした。これが私の関数です:

  function ajaxGetServerDatabase(Div,val,interval){
       console.log(val);
       dbs[val]=new Array();
        $('#bck_action').val('get_DB');
        $('#server_ip').val(val);
        post_data = $('#'+Div+' *').serialize();
        $.ajax({
            type: "POST",
            url: document.URL,
            data: post_data,

            dataType: "text",
            success: function(response) {

                if (response!='no_connection'){
                    dbs[val]=JSON.parse(response)
                    clearInterval(this.interval);  // ???? 
                }

            }
        });
        return false;
    }

  function ajaxGetDatabase(Div,ips,interval){
    $.each(ips,function(i,val){
       dbs[val]=new Array();
        $('#bck_action').val('get_DB');
        $('#server_ip').val(val);
        post_data = $('#'+Div+' *').serialize();
        //    console.log(post_data);
        $.ajax({
            type: "POST",
            url: document.URL,
            data: post_data,

            dataType: "text",
            success: function(response) {

                if (response!='no_connection'){
                    dbs[val]=JSON.parse(response)
                }
                else
               {
                   setInterval("ajaxGetServerDatabase('"+Div+"','"+val+"','"+interval+"')", interval);
               }
            }
        });
    });

    return false;
}

私はそれを呼びます:

  ajaxGetDatabase('tab_backup',ips,3000);
4

5 に答える 5

0
var timer = null;
function ajaxGetServerDatabase(Div,val,interval){
   //...
   if (response!='no_connection'){
                dbs[val]=JSON.parse(response)
                clearInterval(timer);  // ???? 
            }
   //....
   else
           {
               timer = setInterval("ajaxGetServerDatabase('"+Div+"','"+val+"','"+interval+"')", interval);
           }
于 2013-02-27T08:07:15.193 に答える
0

timeoutおそらく設定をお探しですか?例えば

$.ajax({
    timeout: 10000,
    ...
});

http://api.jquery.com/jQuery.ajax/

于 2013-02-27T15:52:58.200 に答える
0

Maybe something close to this?

...
var stopAjax = 0;  //switch is on
if(stopAjax == 0){

  $.ajax({
    ...
    success: function(response) {
    if (response!='no_connection'){
       dbs[val]=JSON.parse(response);
       stopAjax = 1; //switch is off
    }
    else{
        setInterval("ajaxGetServerDatabase('"+Div+"','"+val+"','"+interval+"')", interval);
      }
    }
  });
}
于 2013-02-27T08:34:44.463 に答える
0

clearIntervalとは何の関係もありませんajax。で先にセットしたタイマーをクリアするのがスコープのタイマー機能のみsetIntervalです。本当にタイマー関数を使用したい場合は、setInterval関数に変数をアタッチする必要があります。clearIntervalこれは、setInterval.

var id = " ";
success: function(response) {

   if (response!='no_connection'){
       dbs[val]=JSON.parse(response)
       clearInterval(id);
   }
   else                   
       id= setInterval("ajaxGetServerDatabase('"+Div+"','"+val+"','"+interval+"')", interval);
}

または、 ajax を使用してコードを中止できますabort

于 2013-02-27T08:15:16.803 に答える
0

ここに答えがあります: ajaxGetDatabase で:

 success: function(response) {

                if (response!='no_connection'){
                    dbs[val]=JSON.parse(response)

                }
                else
                {
                 id=setInterval("ajaxGetServerDatabase('"+Div+"','"+val+"')", interval);
            }

ajaxGetServerDatabase で:

    success: function(response) {
            if (response!='no_connection'){
                dbs[val]=JSON.parse(response)
                clearInterval(id);
            }

        }

スコープ パラメータなし

 var id;

それを一般化し、複数のサーバーが停止した(複数のajaxリクエストが失敗した)ために機能させるために、配列を使用して次のようなIDを保存しました:

   var ids=new Array();

   ids[val]=setInterval("ajaxGetServerDatabase('"+Div+"','"+val+"')", interval);

   clearInterval(ids[val]);    
于 2013-02-27T08:57:27.793 に答える