1

我目前有一些 JQuery 代码,我试图确保只有在第一个块中的 AJAX 调用完成后才执行一个代码块。但是,我遇到了一些问题-我尝试使用 JQuery Deferred 方法来执行此操作(下面的代码),但是第一个或第二个代码块都没有运行,所以我认为我走错了路。

我是 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();到最后,但无济于事。

有人可以帮忙吗?

编辑:我在这里查看了解决方案:Waiting for jQuery AJAX response(s)这似乎可行,但我认为问题可能是remoteChainedTo似乎没有内置回调?我是否需要修改代码以添加回调才能使其正常工作,还是 JQuery 能够帮助我?remoteChainedTo 插件getJSON用于从 url 中提取数据。

编辑 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 回答