等待另一个 js 文件中的 ajax 调用


Wait for ajax call in another js file

我有两个js文件。这些是简化版本(实际上有很多代码)

优生.js

此文件包含在页面ucyg.php中 - 此页面通过 Ajax 调用加载到我的index.php中。它的代码是

var Ucyg = function(){
    var load = function() {
    return $.get('Ajax/listado_ucyg.php', {
                   // some get parameters
        }).done(function(data) {
            // some DOM manipulation with Data 
        });
    };
     return {
        load: load
     }
};
    $(document).ready(function() {
        var ucyg = new Ucyg(); 
        ucyg.load();
    });

所以我的 ajax 调用返回ucyg.php包含这个文件(澄清一下:文件 ucyg.js 在我的浏览器中ucyg.php的 ajax 调用返回之前,直到我的index.php中的 ajax 调用返回),当它准备好时,它会执行另一个 ajax 调用来带来listado_ucyg.php

另一个

项目.js

在代码的某些部分,我需要与我在ucyg.php中非常相似的东西,但进行了一些修改。所以我想把ucyg.php作为ajax调用,然后进行所需的修改。就像这样:

    $.ajax({
                type: 'post',
                url: 'Ajax/ucyg.php',
                success: function(data){
                    popUpUcyg(data, fila);
                },
                error: handleError
            });
    var popUpUcyg = function(data, fila){
     var a = $('#someid');
     a.html(data);
    // some dom manipulations (*)
}

问题是我应该做的一些 DOM 操作是在内部 ajax 调用 (listado_ucyg.php) 返回的 html 代码中。

因此,当我执行a.html(data)时,数据被渲染,.js运行其就绪部分并进行ajax调用listado_ucyg.php,但是我必须等到它返回,以便进行我需要的最后修改

我怎么能等到最后一个 ajax 调用完成?如果可能的话,我不想修改ucyg.js

我知道我可以暂停,但我也想避免这种情况。

在服务器端,我使用的是 PHP 5.3,以防有人想到将参数传递给服务器并做一些魔术之类的选项。

编辑:

要澄清顺序:

从索引.php我可以加载任何带有 ajax 调用的页面 - 即 ucyg.php文件 ucyg.php 有<script src="../Js/ucyg.js"></script>这个ucyg.js得到了你可以在上面看到的代码。

在某些时候,从索引.php我加载了item.php,并且此页面具有<script src="../Js/tareas.js"></script>。在某些时候,这个页面(点击事件之后)需要加载一些与我在ucyg.php中非常相似的东西,你可以看到上面的代码。我没有制作另一个页面,而是选择使用 Ajax 调用引入ucyg.php,并使用 js 进行一些修改。问题是,当我带来ucyg.php时,它包括文件ucyg.js(正如我们所说),并且这个文件在准备好时,进行另一个ajax调用。

我需要做的一些修改是在最后一个 ajax 调用执行的数据中。所以我需要以某种方式等到最后一个回来。

我怎样才能做到这一点?

谢谢

一种方法可能是使用ajaxComplete()

$( document ).ajaxComplete(function( event, xhr, settings ) {
    if ( settings.url === "Ajax/listado_ucyg.php" ) {
        /* run DOM code from items.js*/
    }
});

接口文档

也可以使用它来解决连接到项目中 ajax 调用的承诺.js