页面A中有6个iframe。当加载每个iframe时,它需要向页面B发送ajax请求并首先重写数据库中的数据,然后将此iframe的src指向另一个页面C(在第C页,有一些基于重写数据库的计算)。完成所有这些后,将加载下一个iframe。这是一个用于语言php的“for”循环。但是现在有一个问题,因为在页面C中有很多计算,需要一点时间来计算。当这个iframe正在计算时,下一个iframe已将他的ajax请求发送到页面B并且数据库已被更改。那么在iframe完全加载之后我怎么能让下一个iframe发送他的ajax请求呢?我尝试过settimeout并将延迟设置为12秒。但它仍然存在问题。
第A页:
<?php
echo " <table>";
for($i=0; $i<2; $i++) {
echo "<tr>";
for($j=0; $j<3; $j++) {
$divid="div".$i*3+$j;
echo "<iframe id=$divid frameborder='0' height=400></iframe>";
echo "<script language='JavaScript'>showpic($divid);</script></td>";
}
echo "</tr>";
}
echo "</table>";
?>
<script>
function showpic(divid) {
var url = "b.php";
var oBao = CreateHTTPObject();
var sendstring="id="+divid;
oBao.open("POST",url,false);
oBao.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
oBao.onreadystatechange = function () { OnReadyStateChng(divid);};
oBao.send(sendstring);
}
function OnReadyStateChng(divid) {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
document.getElementById(id).src="c.php?id="+divid ;
} else {
}
} else {
}
}
function CreateHTTPObject() {
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
try {
xmlhttp = new XMLHttpRequest();
} catch(e) {
xmlhttp=false;
}
}
if (!xmlhttp && window.createRequest) {
try {
xmlhttp = window.createRequest();
} catch (e) {
xmlhttp=false;
}
}
return xmlhttp;
}
</script>
答案 0 :(得分:0)
试试这个:
// set your delay here, 2 seconds as an example...
var my_delay = 2000;
// call your ajax function when the document is ready...
$(function() {
callAjax();
});
// function that processes your ajax calls...
function callAjax() {
$.ajax({
// ajax parameters here...
// ...
success: function() {
setTimeout(callAjax, my_delay);
}
});
}
答案 1 :(得分:0)
以下代码同步ajax调用,因此,ajax调用按请求顺序执行。
$.ajax({
url: yourUrl,
async: false,
dataType: html
}).done(function(data) {
// Handle response here
};