Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Ajax获取数据后触发jQuery重新绘制_Javascript_Jquery_Ajax_Simultaneous_Simultaneous Calls - Fatal编程技术网

Javascript 使用Ajax获取数据后触发jQuery重新绘制

Javascript 使用Ajax获取数据后触发jQuery重新绘制,javascript,jquery,ajax,simultaneous,simultaneous-calls,Javascript,Jquery,Ajax,Simultaneous,Simultaneous Calls,大家好 长时间的听众,第一次的海报 我有一个客户,他得到了一个看似非常复杂的功能。他们希望在访问者成功登录到他们的帐户后,将3个独立页面的内容加载到一个页面中。他们希望这种情况在不刷新页面的情况下发生。Ajax就是解决方案。但是,我对Ajax没有经验 我不知道如何判断$.get命令(使用jQuery的Ajax命令)何时完成了内容加载。我的方法是,一旦登录成功,就去获取3个单独的页面,将它们的XHTML内容加载到变量中,然后重新绘制页面。下面您将看到我的伪代码。我使用“XXItemXX”代表实际路

大家好

长时间的听众,第一次的海报

我有一个客户,他得到了一个看似非常复杂的功能。他们希望在访问者成功登录到他们的帐户后,将3个独立页面的内容加载到一个页面中。他们希望这种情况在不刷新页面的情况下发生。Ajax就是解决方案。但是,我对Ajax没有经验

我不知道如何判断$.get命令(使用jQuery的Ajax命令)何时完成了内容加载。我的方法是,一旦登录成功,就去获取3个单独的页面,将它们的XHTML内容加载到变量中,然后重新绘制页面。下面您将看到我的伪代码。我使用“XXItemXX”代表实际路径。我试图拉入的每个结果页面都有一个div,其类“content”围绕着我要检索的数据。XHTML如下所示:

<html>
    <head>
        <title>Page Name</title>
    </head>
    <body>
        <div id="header">...</div>
        <div class="content">
        .
        .
        .
        </div>
        <div id="footer">...</div>
    </body>
</html>

页面名称
...
.
.
.
...
我构建的jQuery代码如下。我能够获得提交的表单,甚至可以从各种.get命令中获取内容。问题是,我似乎不能像平常那样把事情串起来。我正在努力弄清楚,一旦成功检索到所有3个页面,如何仅启动jQuery命令来绘制页面。恐怕我最大的绊脚石是,当我用谷歌搜索其他人如何处理这个问题时,如何表达这一点。我不确定如何准确地用10个词或更少的词来描述我想要完成的事情,或者以一种能够实际返回我需要的信息的方式来描述我想要完成的事情

有人能帮忙吗?恐怕我的时间太少了,要学的东西太多了

<script type="text/javascript">
$('XXLoginFormXX').submit(function () {
    $.ajax({  
        type: $(this).attr('method'),
        url: $(this).attr('action'),
        data: $(this).serialize(),
        beforeSend: function() {
            $('<div class="loading">Loading...</div>').insertBefore('XXLoginFormXX').css('position','absolute');
        },
        success: function(data) {  
            // On successful login, draw page. 
            $('.loading').fadeOut('slow');
            var dr_editProfileXHTML, dr_accountOrderListXHTML, dr_wishListsXHTML;
            $.get('XXPathToEditProfilePageXX', function(data1){
                var dr_editProfileXHTML = $('div.content', data1);
            });
            $.get('XXPathToAccountOrderListPageXX', function(data2){
                var dr_accountOrderListXHTML = $('div.content',data2);
            });
            $.get('XXPathToWishListsPageXX', function(data3){
                var dr_wishListsXHTML = $('div.content',data3);
            });
            $('div.content').fadeOut(function(){
                $(this).html(dr_editProfileXHTML);
                $('XXEditProfileXHTMLXX').before(dr_accountOrderListXHTML);
                $('XXEditProfileXHTMLXX').before(dr_wishListsXHTML);
            }).fadeIn();
        }
    }); 
    return false;
});
</script>

$('XXLoginFormXX')。提交(函数(){
$.ajax({
类型:$(this.attr('method'),
url:$(this.attr('action'),
数据:$(this).serialize(),
beforeSend:function(){
$('Loading…').insertBefore('XXLoginFormXX').css('position','absolute');
},
成功:函数(数据){
//成功登录后,绘制页面。
$('.loading').fadeOut('slow');
var dr_editProfileXHTML、dr_accountOrderListXHTML、dr_wishListsXHTML;
$.get('XXPathToEditProfilePageXX',函数(数据1){
var dr_editProfileXHTML=$('div.content',data1);
});
$.get('XXPathToAccountOrderListPageXX',函数(数据2){
var dr_accountOrderListXHTML=$('div.content',data2);
});
$.get('XXPathToWishListsPageXX',函数(数据3){
var dr_wishListsXHTML=$('div.content',数据3);
});
$('div.content').fadeOut(函数(){
$(this.html(dr_editProfileXHTML);
$('XXEditProfileXHTMLXX')。在(dr_accountOrderListXHTML)之前;
$('XXEditProfileXHTMLXX')。之前(dr_wishListsXHTML);
}).fadeIn();
}
}); 
返回false;
});
非常感谢您的时间、帮助和考虑

你的,
Sylvan012

如果您的问题是等待所有3个请求都返回,那么:

  • 将结果存储在范围稍高的变量中,以便每个回调都可以访问它们
  • 在同一范围内添加变量
    绘图
  • 在每个回调中,检查所有3个变量是否均为非null,以及
    drawing
    是否为false
  • 如果是这种情况,则将
    drawing
    设置为true,然后执行此操作

  • 在人们的慷慨帮助下完成这项工作后,我相信我已经得到了。我要感谢戴夫·布莱恩,他教会了我什么时候,什么时候,什么时候

    下面是我提出的伪代码。它似乎起作用了!当然有很多清理工作要做,但所有三个页面现在都被拉进来了!哇

    你觉得我的解决方案怎么样

    <script type="text/javascript">
    $('XXLoginFormXX').submit(function () {
        $.ajax({  
            type: $(this).attr('method'),
            url: $(this).attr('action'),
            data: $(this).serialize(),
            beforeSend: function() {
                $('<div class="loading">Loading...</div>').insertBefore('XXLoginFormXX').css('position','absolute');
            },
            success: function(data) {  
                // On successful login, draw page. 
                var Page01XHTML;
                var Page02XHTML;
                var Page03XHTML;
    
                $.when(
                    $.get('XXPathToEditProfilePageXX', function(data1){
                        var Page02XHTML = $('div.content', data1);
                    }),
                    $.get('XXPathToAccountOrderListPageXX', function(data2){
                        var Page03XHTML = $('div.content',data2);
                    }), 
                    $.get('XXPathToWishListsPageXX', function(data3){
                        var Page01XHTML = $('div.content',data3);
                    })
                ).then(function(Page02XHTML,Page03XHTML,Page01XHTML){
                    $('.loading').fadeOut('slow');
                    $('div.content').fadeOut(function(){
                        $(this).attr('id','MyAccount').html(' ' + Page01XHTML + Page03XHTML + Page02XHTML + ' ').parents('body').find('.content').each(function(){
                            dr_thisID = $(this).attr('id');
                            if (dr_thisID != 'MyAccount') {
                                $(this).appendTo($('div#MyAccount'));
                            }
                        }).parents('div#MyAccount').children().each(function(){
                            dr_thisClass = $(this).attr('class');
                            if (dr_thisClass != 'content') {
                                $(this).remove();
                            }
                        });
                    }).fadeIn();
                });
            }
        }); 
        return false;
    });
    </script>
    
    
    $('XXLoginFormXX')。提交(函数(){
    $.ajax({
    类型:$(this.attr('method'),
    url:$(this.attr('action'),
    数据:$(this).serialize(),
    beforeSend:function(){
    $('Loading…').insertBefore('XXLoginFormXX').css('position','absolute');
    },
    成功:函数(数据){
    //成功登录后,绘制页面。
    var Page01XHTML;
    var Page02XHTML;
    var-Page03XHTML;
    美元。什么时候(
    $.get('XXPathToEditProfilePageXX',函数(数据1){
    var Page02XHTML=$('div.content',data1);
    }),
    $.get('XXPathToAccountOrderListPageXX',函数(数据2){
    var Page03XHTML=$('div.content',data2);
    }), 
    $.get('XXPathToWishListsPageXX',函数(数据3){
    var Page01XHTML=$('div.content',data3);
    })
    ).然后(函数(Page02XHTML、Page03XHTML、Page01XHTML){
    $('.loading').fadeOut('slow');
    $('div.content').fadeOut(函数(){
    $(this).attr('id','MyAccount').html(''+Page01XHTML+Page03XHTML+Page02XHTML+'').parents('body').find('.content').each(function(){
    dr_thisID=$(this.attr('id');
    如果(dr_thisID!=“MyAccount”){
    $(这个)。附加到($('div#MyAccount');
    }
    }).parents('div#MyAccount').children().each(function()){
    dr_thisClass=$(this.attr('class');
    如果(dr_thisClass!=“内容”){
    $(this.remove();
    }
    });
    }).fadeIn();
    });
    }
    }); 
    返回false;
    });
    
    您似乎知道如何编写代码,所以我将此作为一条评论发布-您是否看过ajax when()和done()?看来你能得到