单击即可调用两个ajax函数

时间:2010-12-13 07:27:14

标签: ajax

我在div中有一些文件夹,这些文件夹的内容显示在树状视图中(当点击小加按钮时),使用以下代码:

echo '<span class="toggle" onclick="getchildren(\''.$objectnode["fid"].'\', \'childdiv'.$objectnode["fid"].'\');" ></span>';

单击文件夹时,其内容显示在另一个div中,并使用以下代码与其并行:

<a href="#" onClick="getcontents('<?php echo $objectnode["fid"]; ?>', 'foldercontentsdiv', '<?php echo $objectnode["path"].$objectnode["object_name"]."/"  ?>','foldercontents');" class="<?php echo $objectnode["object_type"]=='folder'? 'folder': 'document'; ?>"><span><?php echo $objectnode["object_name"]; ?></span></a>

现在我要做的是,当我点击文件夹名称时,其内容应该与div并行加载div,以及它的子节点也应该是可见的或同时展开。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:3)

只需进行两次ajax调用。 Ajax调用是异步的,您可以根据需要进行调用。例如,你可以这样做:

function ajax(){
    var xmlhttp =  new XMLHttpRequest();
    xmlhttp.open('POST', 'yourpage.php', true);
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4) {
            // Your callback code goes here
            xmlhttp.responseXML; // this is the response data
        }
    };
    xmlhttp.send(yourdatahere);

    var xmlhttp2 =  new XMLHttpRequest();
    xmlhttp2.open('POST', 'yourpage.php', true);
    xmlhttp2.onreadystatechange = function() {
        if (xmlhttp2.readyState == 4) {
            // Your callback code goes here
            xmlhttp2.responseXML; // this is the response data
        }
    };
    xmlhttp2.send(yourdatahere);
}

从onclick函数调用此函数,这应该可以解决问题。您还可以嵌套函数调用。例如,如果您正在等待第一次调用的数据,请将第二次ajax调用放在第一次调用的回调中并执行所有更新。您不需要等待第二个ajax调用返回更新DOM。

您还可以为每个子节点创建单独的ajax调用,如果要对所有子节点执行此操作,则必须执行一些递归,例如:

function ajax(parentNode){
    var xmlhttp =  new XMLHttpRequest();
    xmlhttp.open('POST', 'yourpage.php', true);
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4) {
            // Your callback code goes here
            xmlhttp.responseXML; // this is the response data
            // do stuff with responseXML
        }
    };
    xmlhttp.send(yourdatahere);

    var i;
    for(i = 0; i < parentNode.childNodes.length; i++){
        ajax(parentNode.childNodes[i]);
    };
}

已经为此制作了插件。我知道jQuery有一个用于它的框架。我建立了自己的,因为它不是我想要的。我希望这有帮助!