我有两个js文件。这些是简化版本(实际上有很多代码)
ucyg.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.php
中index.php
的ajax调用返回之前,我的浏览器中未加载文件ucyg.js ),当它准备就绪时,它会执行另一个ajax调用来调用listado_ucyg.php
另一个
item.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运行其就绪部分并对listado_ucyg.php
进行ajax调用,但我必须等到它返回,才能生成我需要的持续修改
我怎么能等到最后一次ajax调用完成?如果它可行,我不想修改ucyg.js
我知道我可以暂停,但我也想避免这种情况。
在服务器端,我使用的是PHP 5.3,以防有人想到将参数传递给服务器并做一些魔术的选项
修改
澄清序列:
从index.php我可以加载任何带有ajax调用的页面 - 即ucyg.php
文件ucyg.php有<script src="../Js/ucyg.js"></script>
这个ucyg.js
获得了您可以在上面看到的代码。
在某些时候,从index.php我加载item.php,此页面有<script src="../Js/tareas.js"></script>
。
在某些时候,这个页面(在点击事件之后)需要加载与我在ucyg.php
中非常相似的东西,你可以看到上面的代码。我没有创建另一个页面,而是选择使用Ajax调用ucyg.php
,并使用js进行一些修改。问题是,当我带上ucyg.php时,它包含文件ucyg.js(正如我们所说的),这个文件准备就绪后再进行另一个ajax调用。
我需要做的一些修改是在最后一次ajax调用所做的数据中。所以我需要等到最后一个回来。
我怎样才能实现这一目标?
由于
答案 0 :(得分:2)
一种方法可能是使用ajaxComplete()
$( document ).ajaxComplete(function( event, xhr, settings ) {
if ( settings.url === "Ajax/listado_ucyg.php" ) {
/* run DOM code from items.js*/
}
});
还可以使用它来解决连接到item.js
中的ajax调用的promise