4

JavaScript、jQuery、PHP を使用しています。JavaScript 関数の実行を 1 回に制限するにはどうすればよいですか?

私の MainJQuery ファイルには Ajax があります。display.php をしばらく実行します。

....

$.ajax({
    type:'POST',
    url: 'display.php',
    data:'id='+id  ,
    success: function(data){
        $("#response").html(data);

        //Here Get_list should be execute only once.
        get_list('get');

        // Display should execute as usual
        display();
    }//success
}); //Ajax

.......

get.Php ファイルは JavaScript に値を書き込みます。

<?php
    print "<script language='javascript'>";
    print " g_cost[g_cost.length]=new Array('STA-VES','East',4500);";
    print " g_cost[g_cost.length]=new Array('STA-CRF','West',5400);";
    print "</script>";
?>

私の JavaScript 関数には、PHP からの次の値があります。

function get_list('get'){
    for(var i=0;i<g_cost.length;i++)
        var temp = g_cost[i];

    var Name = temp[0];
    var direction = temp[1];
    var cost = temp[2];

    ..
    some code
    ...
}

function display(){
    for(var i=0;i<g_cost.length;i++)
        alert(g_cost.length);
    var temp = g_cost[i];
    alert(temp[0]);
    alert(temp[1]);
    alert(temp[2]);
}

jQuery Ajax成功部分でJavaScript関数の実行を制限することはできますか?

4

6 に答える 6

5

関数を空の関数に置き換えることができます。これは基本的に Rene Saarsoo のソリューションと同じですが、見栄えが良くなります。

var get_list = function(param1, param2, ...) {
     // your code here
     get_list = function() {};
};
于 2010-09-17T13:14:43.047 に答える
3

一度だけ実行する関数を作成するには:

get_list = (function(){
  var counter = 0;
  return function(param1, param2, ...) {
    if (counter > 0) {
      return;
    }
    counter++;

    // your normal function code here
  };
})();

これは、関数が実行された回数を追跡するためにグローバル変数を使用するのとほぼ同じですが、グローバル変数の代わりに内部関数のみが参照できる変数を作成する点が異なります。その後、他の関数と同じように get_list を使用します。

これはおそらく、関数プロトタイプでより一般的なものにリファクタリングされる可能性があるため、次のように使用できます。

get_list = (function (param1, param2, ...) {
  ...
}).once();
于 2009-01-11T13:21:52.760 に答える
3

3 つのオプション:

  1. グローバルスコープでブールフラグを設定し、実行が成功した後に設定し、実行前に確認します

  2. 実行が成功したら、ボタン (またはワンタイム メソッドを呼び出すために使用しているコントロール) を無効にします。

  3. あまり好まれませんが、サーバー側で検証を行うこともできます。つまり、毎回メソッドを呼び出しますが、サーバー側で検証します。利点は、これによりサーバー上のデータの一貫性が確保されることです。

于 2009-01-11T10:48:31.230 に答える
1

最も速い方法は、成功宣言に 1 行追加することです。

$.ajax({
    type:'POST',
    url: 'display.php',
    data:'id='+id  ,
    success: function(data){
        if(!arguments.callee.stop){ arguments.callee.stop = true; }else{ return; }

        $("#response").html(data);
        //Here Get_list should be execute only once   
        get_list('get');

        // display should execute as usual  
        display();

    }//success
}); //ajax
于 2009-01-12T14:43:34.937 に答える
0

呼び出しが成功したら、Ajax トリガー (リンク、ボタンなど) を無効にしてみてください。

トリガーの例:

<a id="ajax_trigger" href="#" onclick="yourAjaxCall(); return false;">Get List</a>

...

success: function(data){
    $("#response").html(data);
        //Here Get_list should be execute only once
         get_list('get');

        // Some code to disable, or hide #ajax_trigger
        // in other words, make it unclickable or disappear.
        $("#ajax_trigger").css('display': 'none'); // IIRC

        // Display should execute as usual
        display();
}//success
于 2009-01-11T10:45:07.040 に答える