1

コード内の別の場所に特定のフラグが設定されている場合にのみ実行する必要があるajax呼び出しがあります。

フラグを設定するたびにこの呼び出しを行う必要がないため、フラグを設定する関数で直接この呼び出しを行うことはできません。

説明するのは少し難しいので、私が考えることができる最高のイラストは次のようなものです。

オオカミは、おばあちゃんの家にいるときだけ、レッドハットを食べることができます。しかし、彼女がこの家に来るたびに、彼女を食べるオオカミがいます。彼女がここにいてオオカミがここにいるたびに反対側から、オオカミは彼女を食べるでしょう。

この目的で$.when(theFlag)を使用できますか?

var theRedHatIsHere = false;

function waitForRedHat()
{
.....
   theRedHatIsHere = true;
}

function wolfIsHungry(link)
{
   $.when(theRedHatIsHere)
   {
       $.ajax({
                type: "POST",
                url: "php/eatredhat.php?",
                data: ddd,
                async: false,
                success: function(msg){
                        console.log( "Eaten" );
                        window.location.href = link;
                }
        });                         
   }
}
4

3 に答える 3

3

$.when を曲げる代わりに、カスタム イベントまたはパブリッシュ/サブスクライブ パターンを使用して、すべきでないことを行います。これはよく知られたパターンであり、コンポーネントを分離するのに役立ちます。たとえば、イベントに複数のサブスクライバーを設定したり、ある時点でイベントのリッスンを停止したり、一度だけ反応したりするなどの柔軟性があります。

jQuery.on でカスタム イベントをサブスクライブする

$(document).on('WolfIsHome', function(){
   $(document).on('WolfGotHungry', function(){
       $(document).on('RedHatArrived', function()
            $.ajax({
                type: "POST",
                url: "php/eatredhat.php?",
                data: ddd,
                async: false,
                success: function(msg){
                        console.log( "Eaten" );
                        window.location.href = link;
                }
            });
      }
  });
});

オオカミが空腹になるたびに、そのブール値を設定する代わりに、そのカスタム イベントを発生させます。

$(document).trigger("WolfIsHome"); // trigger in your logic when the wolf is home

$(document).trigger("WolfGotHungry"); //trigger wolfhungry which will register a subscriber to RedHat arrival event

//and somewhere else in the code
// if RedHatArrived and Wolf is not hungry then nothing will happen 
// because there won't be registered subscribers to her arrival
$(document).trigger("RedHatArrived"); 
于 2012-11-04T10:26:11.150 に答える
2
var theRedHatIsHere = $.Deferred();

function waitForRedHat()
{
.....
   theRedHatIsHere.resolve();
}

function wolfIsHungry(link)
{
   $.when(theRedHatIsHere).then(function() {
       $.ajax({
                type: "POST",
                url: "php/eatredhat.php?",
                data: ddd,
                async: false,
                success: function(msg){
                        console.log( "Eaten" );
                        window.location.href = link;
                }
        });                         
   });
}

ここでの欠点の 1 つは、リクエストを 1 回しかトリガーできないことです。

于 2012-11-04T09:59:28.693 に答える
0

ここでできることがあります。のグローバル値を使用する代わりにtheRedHatIsHere、入力要素に保存できます。好き<input type="hidden" id="theRedHatIsHere" value="0"/>

この値が更新されたら、イベントを発生させます。次のようにバインドできます。

$(function () {
    $('#theRedHatIsHere').on("change", function () {
        if ($(this).val() == 1 && wolfIsHungry == 1) {
            $.ajax({
                type: "POST",
                url: "php/eatredhat.php?",
                data: ddd,
                async: false,
                success: function (msg) {
                    console.log("Eaten");
                    window.location.href = link; // dont know where this link is being sent from
                }
            });
        }
    });
});

それはどのように聞こえますか?

于 2012-11-04T09:52:24.797 に答える