我可以发送变量和xmlhttp响应文本吗?

时间:2014-02-14 00:55:54

标签: javascript php ajax xmlhttprequest

我有一个像这样定义的函数:

function call_view_details(viewid)
{
    view_details(viewid);
    setInterval(function(){view_details(viewid)},5000);
}

我在页面加载时调用。主要是设置view_details()的间隔。

此处view_details()

function view_details(viewid)
{
    if (window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("item_details").innerHTML=xmlhttp.responseText;         
        }
    }
    xmlhttp.open("GET","view_item.php?id="+viewid,true);
    xmlhttp.send(); 
    return false;
}

如您所见,view_details()通过div的回复更新了一些view_item.php

但我希望在某些情况下(发生在view_item.php),在clearInterval()上执行view_details()

现在我不想说:

if(xmlhttp.responseText==/*something*/)
    /*clearInterval*/

这是因为,首先,有很多案例,其次,在这些情况下,view_item.php回应我需要更新div的内容。

所以也许我可以让view_item.php除了响应之外还传递一些变量?然后我可以对该变量做出条件。

我希望它足够清楚......

谢谢

1 个答案:

答案 0 :(得分:1)

返回一个JSON对象。

view_item.php

<?php

  // PHP stuff

$returnArray = array();

$returnArray['message'] = $yourRespondText;

$returnArray['clearInterval'] = true; // return true when you want to call clearInterval


echo json_encode($returnArray);

JS:

function call_view_details(viewid)
{
    view_details(viewid);
    var interval = setInterval(function(){view_details(viewid, interval )},5000);
}




function view_details(viewid, yourInterval)
{
    if (window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            data = JSON.parse(xmlhttp.responseText);

            if(data.clearInterval) {
                clearInterval(yourInterval);
            }
            document.getElementById("item_details").innerHTML=data.message;         
        }
    }
    xmlhttp.open("GET","view_item.php?id="+viewid,true);
    xmlhttp.send(); 
    return false;
}