我创建了一个javascript对象和相关的方法,看起来非常类似于此。 “getUserInfo”在$()。ready(function(){}
中执行function userObject(userId)
{
this.userId = userId;
this.getUserMachineList = function(infoId, machineListId)
{
jQuery.post(machDBPHPPath + "/listAllUserMachineAccess.php",
{ userId : this.userId, sid : Math.random() },
function(xmlDoc)
{
var userMachineListXml = document.createElement("xml");
//populate serialized xml in dom element here
}
});
}
我试图在populatePage()中读取填充的xml元素的内容,见下文。
问题是(我相信很多人以前见过这个),当我调用populateUserPage时,“getUserInfo”创建的xml元素是不存在的,这是基于此xml中的信息进行进一步的ajax调用元件。
$().ready(function()
{
//create sessionUser here..
sessionUser.getUserMachineList(USER_MACHINE_INFO_ID, USER_MACHINE_XML_ID);
populatePage();
});
我已经将setTimeout与populatePage一起使用,作为过去的解决方法,但不喜欢这个 - 这是一个黑客,并不总是有效。
理想情况下,有一些方法可以等待这个id存在于我不知道的DOM中,这会很棒,但还没有找到...
或者这可能是一般的网页设计缺陷,我应该重新设计我的服务器端代码以考虑这种异步性?
感谢您的帮助..
-Larry
答案 0 :(得分:0)
将我的代码保留在函数getUserMachineList的ajax回调之后的想法是将此代码保持为其他页面的通用,具有不同的doms /格式/目的。解决方案最终变得简单 - 我在getUserMachineList的回调中使用“eval”,并将getUserMachineList的参数作为我想用来填充此页面的特定函数 - “populatePage”。这是代码:
//from a global js file
this.getUserMachineList = function(infoId, machineListId, jsCmd, jsArg)
{
jQuery.post(machDBPHPPath + "/listAllUserMachineAccess.php",
{ userId : this.userId, sid : Math.random() },
function(xmlDoc)
{
var userMachineListXml = document.createElement("xml");
//populate serialized xml to element
//do page specific stuff here, after my xml element is populated
eval(jsCmd + "(\"" + jsArg + "\")");
});
}
//from my page specific js file, loaded after the above code. the function
//"populatePage" takes this serialized xml created by getUserMachineList and
//populates my page appropriately
$().ready(function()
{
sessionUser = new userObject(getUserIdFromCookie());
sessionUser.getUserMachineList(USER_MACHINE_INFO_ID, USER_MACHINE_XML_ID,
"populatePage","");
});
看起来您可以使用此模式将回调中的函数链接在一起。不理想,但它比setTimeout黑客好得多..
非常感谢,并且很高兴参加演出 -
-Larry