【问题标题】:JavaScript extracting data from XML (if else statement not working)JavaScript 从 XML 中提取数据(if else 语句不起作用)
【发布时间】:2015-02-14 08:16:36
【问题描述】:

所以我在下面代码中的问题在于底部的 if else if 语句: 1. 两个 if 语句中的代码都能完美运行。 2.问题是当我在一个上运行代码时可以使用。 如果我做 2 个单独的 if 语句,只有第二个有效。 if i do 1 if and one else if 只有 if 语句有效,而 else if 什么都不做。

更多信息:我正在尝试做的是每次函数超时并再次循环时,它会检查 if 语句以及是否发生更改以运行适当的 if 子句。 如果需要更多信息,请告诉我。

var xmlHttp = createXmlHttpRequestObject();

function createXmlHttpRequestObject()
{
var xmlHttp;

if(window.ActiveXObject)
{
    try
    {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }catch(e)
    {
        xmlHttp = false;
    }
}
else
{
    try
    {
        xmlHttp = new XMLHttpRequest();
    }catch(e)
    {
        xmlHttp = false;
    }
}

if(!xmlHttp)
    alert("cant create object");
else
    return xmlHttp;


}

function process_search()
{
if(xmlHttp.readyState==0 || xmlHttp.readyState==4)
{
    search_parameter = encodeURIComponent(document.getElementById("userInput").value);
    search_type = encodeURIComponent(document.getElementById("userOptions").value);
    xmlHttp.open("GET", "../pages/search_xml.php?search_parameter=" + search_parameter +      "&search_type=" + search_type, true);
    xmlHttp.onreadystatechange = handleServerResponse;
    xmlHttp.send(null);
}
else
{
    setTimeout('process_search()',5000);
}
}

function handleServerResponse()
{
if(xmlHttp.readyState==4)
{
    if(xmlHttp.status==200)
    {
        xmlResponse = xmlHttp.responseXML;
        root = xmlResponse.documentElement;

        if(document.getElementsByTagName('find_users'))   // FIND USERS
        {
            first_name = root.getElementsByTagName('first');
            last_name = root.getElementsByTagName('last');

            users = document.createElement('ul');
            users.setAttribute("id", "usersFound");

            document.getElementById("underInput").innerHTML = "";   //RESETS THE DIV BEFORE INSERTING DATA
            for(var i=0; i< first_name.length; i++)
            {
                usersList = document.createElement('li');
                t = document.createTextNode(first_name.item(i).firstChild.data + " - " + last_name.item(i).firstChild.data + "<br/>");
                usersList.appendChild(t);
                underInput = document.getElementById("underInput");

                underInput.appendChild(usersList);
            }
        }else if(document.getElementsByTagName('find_config_item'))   //FIND CONFIG ITEMS
        {
            item = root.getElementsByTagName('item');
            desc = root.getElementsByTagName('description');

            itemsList = document.createElement('ul');
            itemsList.setAttribute("id", "itemsFound");

            document.getElementById("underInput").innerHTML = "";   //RESETS THE DIV BEFORE INSERTING DATA
            for(var i=0; i< item.length; i++)
            {
                itemList = document.createElement('li');     // CREATE LIST ITEM ELEMENT
                t = document.createTextNode(item.item(i).firstChild.data + " - " + desc.item(i).firstChild.data + "<br/>");
                itemList.appendChild(t);
                underInput = document.getElementById("underInput");

                underInput.appendChild(itemList);
            }
        }


        setTimeout('process_search()', 5000);
    }
    else
    {
        alert("something is wrong");
    }
}
}

【问题讨论】:

    标签: javascript html ajax


    【解决方案1】:

    对于这个用例,您不应该真的依赖 try/catch。您可以相当肯定 XMLHttpRequest 或 Mircrosoft.XMLHTTP 对象将存在,因此您可以将代码简化为以下内容:

    function createXmlHttpRequestObject () {
        return window.XMLHttpRequest ? new XMLHttpRequest() : new XDomainRequest();
    }
    
    var xmlHttp = createXmlHttpRequestObject();
    

    如果您想查看非三元版本,请告诉我

    【讨论】:

    • 感谢..工作完美,我理解...关于我的 if else if 问题的原始问题呢?如果我运行它,它仍然有同样的问题]
    • 我不知道你在问什么对不起。你能澄清一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多