1

私は現在、最初のブロックの AJAX 呼び出しが完了した後にのみコードの 1 つのブロックが実行されるようにしようとしている JQuery コードをいくつか持っています。ただし、いくつかの問題があります-JQuery Deferred メソッドを使用してこれを実行しようとしましたが (以下のコード)、最初のコード ブロックも 2 番目のコード ブロックも実行されていないため、間違った方向に進んでいると思います。

私はDeferredメソッドを初めて使用するので、誰かが私を正しい方向に向けるか、これを行う別の(おそらくより良い)方法を指摘してくれることを願っています。

function makeChains(){
    $('.chained_to_vehicle_make_selector').remoteChainedTo('.chained_parent_vehicle_make_selector', '/models.json');
    $('.chained_to_vehicle_model_selector').remoteChainedTo('.chained_parent_vehicle_model_selector', '/trims.json');
    $('.chained_to_vehicle_trim_selector').remoteChainedTo('.chained_parent_vehicle_trim_selector', '/model_years.json');
}

var chainCall = $.Deferred(function() {
    makeChains();
});

chainCall.done(function() { 
    $(".chzn-select").chosen();
    $(".chained_parent_vehicle_make_selector").chosen().change( function() {$(".chained_to_vehicle_make_selector").trigger("liszt:updated"); });
    $(".chained_parent_vehicle_model_selector").chosen().change( function() {$(".chained_to_vehicle_model_selector").trigger("liszt:updated"); });
    $(".chained_parent_vehicle_trim_selector").chosen().change( function() {$(".chained_to_vehicle_trim_selector").trigger("liszt:updated"); });
    $(".chained_child").chosen();
});

私もchainCall.resolve();最後に追加しようとしましたが、役に立ちませんでした。

誰でも手伝ってもらえますか?

編集: ここで解決策を見てきました:動作するように見えるjQuery AJAX 応答を待機してremoteChainedToいますが、コールバックが組み込まれていないように見える問題があると思いますか? これを機能させるには、コードを変更してコールバックを追加する必要がありますか? それとも JQuery が役に立ちますか? remoteChainedTo プラグインはgetJSON、URL からデータを取得するために使用しています。

EDIT 2: この質問はあまり好きではありません - さらなるアイデアはありますか?

4

1 に答える 1

0

remoteChained メソッドが jqXHR オブジェクト (遅延オブジェクト) を返すことを考慮すると、次のようなことを試してみてください。

var dfds = [],
list = ['vehicle_make_selector','vehicle_model_selector','vehicle_trim_selector'],
urls = ['/models.json','trims.json','/model_years.json'];

for(var i=0;i<list.length;i++){
    dfds.push( $('chained_to_' + list[i]).remoteChainedTo('chained_parent',urls[i]);
}

$.when.apply($,dfds).done(function(){
     $(".chzn-select").chosen();
     //... rest of the code.
})
于 2012-09-05T22:53:02.887 に答える