【问题标题】:How to delay a ajax function? setTimeout does't work如何延迟ajax函数?设置超时不起作用
【发布时间】:2014-01-03 17:13:36
【问题描述】:

A页面有6个iframe,每加载一个iframe,都需要向B页面发送ajax请求,先重写数据库中的数据,然后这个iframe的src直接指向另一个页面C(在C页,有一些基于重写数据库的计算)。完成所有这些后,将加载下一个 iframe。这是一个“for”循环使用的语言 php。但是现在有个问题,因为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>

【问题讨论】:

标签: php ajax iframe


【解决方案1】:

试试这个:

// 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);
        }
    });
}

【讨论】:

  • 你能告诉我如何用javascript编写吗?我不熟悉jquery。我把 setTimeout 放在 OnReadyStateChng 中。但这似乎是错误的。它总是不停地调用 callAjax()。 function OnReadyStateChng(divid) { if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { setTimeout(callAjax, my_delay);//在这里添加???? } 其他 { } } 其他 { } }
【解决方案2】:

下面的代码同步了ajax调用,所以ajax调用是按照请求的顺序执行的。

    $.ajax({
        url: yourUrl,
        async: false,
        dataType: html
    }).done(function(data) {
        // Handle response here
    };

更多详情:http://api.jquery.com/jQuery.ajax/

【讨论】:

  • 你能告诉我怎么用javascript写吗?
  • 抱歉,javascript 不提供 ajax 同步。更好地使用Jquery,它更高级和简单。还是你想用 JS 那我们就得解决它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 2013-09-28
相关资源
最近更新 更多