我现在正把头靠在墙上3个小时。我有这段代码:
function showpctask() {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
var xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("pcactivitytask").innerHTML = xmlhttp.responseText;
}
};
xmlhttp.open("GET","showpctask.php"+,true);
xmlhttp.send();
}
在div中打开一个php文件(id = pcactivitytask)。那个php文件构建了一个'select'
我也有这个功能:
function setpctaskwidth() {
var maxtaskwidth = 0;
$("div .pcactivitytask").each(function(){
c_width = parseInt($(this).width());
if (c_width > maxtaskwidth) {
maxtaskwidth = c_width;
}
});
alert (maxtaskwidth);
}
将显示具有“pcactivitytask”类的所有元素的最大宽度。是的,前一个脚本创建的选择具有该类。如果我同时调用这两个函数它将不包括新创建的选择的宽度.....我需要再次运行它'manuall'。我需要我的脚本“onclick”同时构建新的选择并包含它以通过第二个脚本找到最大宽度。谢谢。
答案 0 :(得分:2)
XMLhttprequest
异步工作,这意味着它不会按顺序发生。
这就是为什么你有xmlhttp.onreadystatechange
回调函数,它只在请求完成后运行
您没有指定如何调用这两个函数,但我希望在setpctaskwidth()
函数中看到对此onreadystatechange
的调用,如下所示:
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("pcactivitytask").innerHTML = xmlhttp.responseText;
setpctaskwidth();
}
};
请注意,如果响应包含页面中尚不存在的图像或其他外部资源(字体等),则可能会获得与实际最终大小不同的大小(它将在加载图像之前测量大小) )