1

我正在为滑块加载 jquery 中的所有外部页面。问题是它以不同的顺序加载。我需要做的是对页面的加载进行排序

$.get("page1.php", function( my_var ) {
    $('#slider').append($('.content', my_var));
});
$.get("page2.php", function( my_var ) {
    $('#slider').append($('.content', my_var));
});
$.get("page3.php", function( my_var ) {
    $('#slider').append($('.content', my_var));
});

有时 page3 在 page2 之前加载。

4

4 回答 4

1

您可以尝试嵌套调用。当页面完成加载时,加载下一个.. 像这样的东西:

$.get("page1.php", function( my_var ) {
    $('#slider').append($('.content', my_var));
    $.get("page2.php", function( my_var ) {
        $('#slider').append($('.content', my_var));
        $.get("page3.php", function( my_var ) {
            $('#slider').append($('.content', my_var));
        });
    });
});
于 2012-09-03T15:16:42.937 回答
1

你可以一一加载。

$.get("page1.php", function( my_var ) {
    $('#slider').append($('.content', my_var));
    $.get("page2.php", function( my_var ) {
        $('#slider').append($('.content', my_var));
        $.get("page3.php", function( my_var ) {
              $('#slider').append($('.content', my_var));
         });
    });
});

或者,如果您可以使用包装容器,则可以使用.load方法,它允许您在 url 中使用选择器。而且这个解决方案会让3个内容同时加载,但位置是固定的。

var slider = $('#slider');
$('<div>').appendTo(slider).load('page1.php .content');
$('<div>').appendTo(slider).load('page2.php .content');
$('<div>').appendTo(slider).load('page3.php .content');
于 2012-09-03T15:16:30.097 回答
1

它是这样工作的,因为$.get它是异步方法(它是 ajax 请求的简写)。您可以使用$.when方法来测试请求是否已完成:

var getPage1 = $.get("page1.php", function( my_var ) {
    $('#slider').append($('.content', my_var));
});

// you can pass 1 or more deffereds
$.when(getPage1).done(function() {
    // do something
});
于 2012-09-03T15:16:35.343 回答
1

发生这种情况是因为您正在处理异步执行。Ajax 调用的顺序无法保证。在前一个的回调中调用每个 $.get 。就像是:

$.get("page1.php", function( my_var1 ) {
    $('#slider').append($('.content', my_var1 ));
    $.get("page2.php", function( my_var2 ) {
        $('#slider').append($('.content', my_var2 ));
        $.get("page3.php", function( my_var3 ) {
            $('#slider').append($('.content', my_var3 ));
        });
    });
});
于 2012-09-03T15:14:24.070 回答