与jml相关的选项填充xml无法在Chrome或IE中运行(无兼容性视图)

时间:2015-09-09 16:16:56

标签: javascript jquery html xml google-chrome

我有一个多年前写的网页,当我们尝试更新它以便在更现代的浏览器中使用时,它给了我一些问题。

我在Chrome中遇到的错误是“未捕获的TypeError:xml_map.namedRecordset不是函数”

这导致我们必须填充的选择框因为它似乎存在xml解析的问题。

选择框的javascript位于:

<script language="JScript">

$(function() {
    var currentDate = new Date();
    $('#datepicker1').datepicker({
        inline: true,
        showOtherMonths: true,
        dayNamesMin: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
        dateFormat: 'dd/mm/yy'
    });
    $("#datepicker1").datepicker("setDate", "-30d");
});

$(function() {
    var currentDate = new Date();
    $('#datepicker2').datepicker({
        inline: true,
        showOtherMonths: true,
        dayNamesMin: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
        dateFormat: 'dd/mm/yy'
    });
    $("#datepicker2").datepicker("setDate", currentDate);
});

//date_index_choice allows us to use Report_Date date index if it exists, otherwise we use Cypress date (Document Creation Time)
var date_index_choice = "[Document Creation Time]";

// Fill first drop down list when desired
function refill()
    {
    FillSortDropDownWithFields(queryform.dropdown1, xml_map.namedRecordset("", "category_list.category"));
    }

// Refill second drop down list when desired
function refill2(x)
    {
    dRecordSet=xml_map.namedRecordset("", "category_list.category");
    dRecordSet.MoveFirst();
    x = x - 1
    for (i=0; i<x; i++)
        {
        dRecordSet.MoveNext();
        }
    //"category_list.category.sub_category"
    FillSortDropDownWithFields2(queryform.dropdown2, xml_map.namedRecordset("", "category_list.category.sub_category"));
    }

//Refill dropdown menu
function refill3(x)
    {
    dRecordSet=xml_map.namedRecordset("", "category_list.category.sub_category");
    dRecordSet.MoveFirst();
    x = x - 1;
    for (i=0; i<x; i++)
        {
        dRecordSet.MoveNext();
        }
    //"category_list.category.sub_category"
    FillSortDropDownWithFields3(queryform.dropdown3, xml_map.namedRecordset("", "category_list.category.sub_category.report_name"));
    }

// Fill dropdown with field names from the ADO RecordSet
function FillSortDropDownWithFields(oDropDown, oRecordSet)
    {
    // Clear out the current drop down values
    //alert(oRecordSet.RecordCount);
    var record_length       = 0;

    for (i=0; i < oDropDown.options.length;i+1)
        {
        oDropDown.options[i]=null;
        }

    record_length       = oRecordSet.RecordCount + 1
    //Get to the first element of the dataset
    oRecordSet.MoveFirst();
    // add each of the elements in the dataset to the drop-down
    for (i=0; i < record_length; i++)
        {
        oField = oRecordSet.fields;
        //alert(oField(2).value);
        if(i == 0)
            oDropDown.options[i]=new Option("--Select--","--Slelct--")
        else
            oDropDown.options[i]=new Option(oField(1).value,oField(1).value)
        if(i > 0)
            oRecordSet.MoveNext(); 
        }
    }

function FillSortDropDownWithFields2(oDropDown, oRecordSet)
    {   
    // Clear out the current drop down values
    for (i=1; i<oDropDown.options.length;i+1)
        {
        oDropDown.options[i]=null;
        }

    //alert(oRecordSet.RecordCount);
    //Get to the first element of the dataset
    oRecordSet.MoveFirst();

    // add each of the elements in the dataset to the drop-down
    for (i = 1; i <= oRecordSet.RecordCount; i++)
        {
        oField = oRecordSet.fields;
        //alert(oField(4).value);
        oDropDown.options[i]=new Option(oField(1).value,oField(1).value)
        oRecordSet.MoveNext(); 
        }
    }

//Fills the thirs drop down menu  
function FillSortDropDownWithFields3(oDropDown, oRecordSet)
    {   
    // Clear out the current drop down values
    for (i=1; i < oDropDown.options.length;i+1)
        {
        oDropDown.options[i]=null;
        }

    //alert(oRecordSet.RecordCount);
    //Get to the first element of the dataset
    oRecordSet.MoveFirst();

    // add each of the elements in the dataset to the drop-down
    for (i = 1; i <= oRecordSet.RecordCount; i++)
        {
        oField = oRecordSet.fields;
        //alert(oField(0).value);
        oDropDown.options[i]=new Option(oField(0).value,oField(0).value)
        oRecordSet.MoveNext(); 
        }
    }

//Gets indexes from CYpress generated XML file
function load_indexes()
    {
    var report_name             = "";
    var rdm_group_size          = 0;
    var rdm_report_size         = 0;
    var rdm_inx_size            = 0;
    //var xmlDoc                    = new ActiveXObject("Microsoft.XMLDOM");
    var array_counter           = 0;
    var invalid_index_counter   = 0;
    var group_counter           = 0;
    var report_counter          = 0;
    var sub_report_counter      = 0;
    var index_list_counter      = 0;
    var index_counter           = 0;
    var index_name_array_counter= 0;
    var total_index_count       = 0;
    var index_name_array        = new Array();

    //xmlDoc.async="false";
    //xmlDoc.onreadystatechange=verify;

    //alert("Before XML Load");
    //xmlDoc.load("GR_Prd_DV1_rdm_groups.xml");
    xmlObj=xmlDoc.documentElement;
    /*
    if (xmlDoc.readyState != 4)
        {
        alert("XML file did not load");
        return;
        }   
    */
    //alert("After XML Load");

    //RDM Groups List
    //alert("Initial Tag:" + xmlObj.tagName);
    //alert("Report_list:" + xmlObj.childNodes(0).tagName);
    //alert("Group Length:" + xmlObj.childNodes(0).childNodes.length);
    //alert("Report Parameter:" + document.queryform.dropdown3.value);
    while (report_counter < xmlObj.childNodes(0).childNodes.length)
        {
        //alert("Report Names:" + xmlObj.childNodes(0).childNodes(report_counter).getAttribute("obj_name"));
        //Loop through RDM Groups
        //alert("Report Counter=" + report_counter);
        if(xmlObj.childNodes(0).childNodes(report_counter).getAttribute("obj_name") == document.queryform.dropdown3.value)
            {
            //alert("Reports:" + xmlObj.childNodes(0).childNodes(report_counter).tagName)
            //Sub Report Loop
            index_list_counter = 0;
            while(index_list_counter < xmlObj.childNodes(0).childNodes(report_counter).childNodes.length)
                {
                 if(xmlObj.childNodes(0).childNodes(report_counter).childNodes(index_list_counter).tagName == "index_list")
                    {
                    //alert("index_list:" + xmlObj.childNodes(0).childNodes(report_counter).childNodes(index_list_counter).tagName);    
                    //Loop through indexes
                    //index_counter = 0;
                    while(index_counter < xmlObj.childNodes(0).childNodes(report_counter).childNodes(index_list_counter).childNodes.length)
                        {
                        index_name_array[index_counter] = xmlObj.childNodes(0).childNodes(report_counter).childNodes(index_list_counter).childNodes(index_counter).getAttribute("obj_name");
                        total_index_count   = index_counter;
                        //alert("index name:" + xmlObj.childNodes(0).childNodes(report_counter).childNodes(index_list_counter).childNodes(index_counter).getAttribute("obj_name"));
                        index_counter = index_counter + 1;
                        }//end of looping through indexes
                    }//end of index_list (if)
                index_list_counter = index_list_counter + 1;
                }//End of index_list    
            }//End of Report Name Compare(if)
        report_counter = report_counter + 1;
        }//End of Looping though Groups

    //Clear out current index drop down values
        for (i=1;i<queryform.dropdown4.options.length;i+1)
            {
            //alert ("Clearing index:"+queryform.dropdown4.options[i])
            queryform.dropdown4.options[i] = null;
            }

    //Set date_index_choice to use Cypress date by default
    date_index_choice = "[Document Creation Time]";
    //alert("total_index_count(" + total_index_count + ")")
    while(array_counter <= total_index_count)
        {
        //alert("Adding Index:" + index_name_array[array_counter])
        //Add to indices to index list unless it is the generic date index, report ID or name, or old category index
        if (index_name_array[array_counter] != "Report_Date" && index_name_array[array_counter] != "Report ID" && index_name_array[array_counter] != "Report Category")
            queryform.dropdown4.options[array_counter + 1 - invalid_index_counter]=new Option(index_name_array[array_counter],index_name_array[array_counter])
            else 
                {
                //Use Report_Date for date search index if it exists
                if (index_name_array[array_counter] == "Report_Date")
                    date_index_choice = "[Report_Date]";
                invalid_index_counter = invalid_index_counter + 1;
                }
        array_counter = array_counter + 1;
        }
    //alert("end of Load Index Function");
    }


function reorder_date(string)
    {   
    year = string.substring(string.length-4);
    month = string.substring(0,string.indexOf("/"));
    day = string.substring(string.indexOf("/")+1,string.lastIndexOf("/"));
    next_string= year + "," + month + "," + day;
//  alert(next_string);
    return next_string;
    }
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@                                                                            @@
@@ Function:     submit_query                                                 @@
@@ Returns:      n/a                                                          @@
@@ Description:  prepares the form objects for query then submits query       @@
@@                                                                            @@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
function submit_query()
  {
 var querystring   =""; 


//Check that a report name is selected
 if (queryform.dropdown3.value == "")
    {
        alert("Please select a Category, Subcategory, and/or Report Name");
        return;
    } 

//Check for criteria value entered but index not selected
 if(queryform.dropdown4.value == "" && queryform.query_text.value !="") 
    {
    alert("Please select which Criteria to use or clear the Criteria text");
    return;
    }

//Check for criteria index select but no value entered
 if(queryform.dropdown4.value != "" && queryform.query_text.value =="") 
    {
    alert("Please enter Criteria text or clear Criteria selection");
    return;
    }

//Check for from date not entered but to date entered
 if(queryform.date1.value == "" && queryform.date2.value != "") 
    {
    alert("You must enter a beginning date");
    return;
    }

if(queryform.dropdown3.value == "All Reports" && queryform.dropdown4.value == "")
    {
    alert("This search requires Criteria to be entered");
    return;
    }

 if(queryform.dropdown3.value != "All Reports")
    querystring  = "[Document Distribution Report]=\"" + queryform.dropdown3.value + "\"";


 if(queryform.dropdown4.value != "")
    {
    if(queryform.dropdown3.value != "All Reports")
        querystring = querystring + " and ";

//logic for using numeric indices
    if(queryform.dropdown4.value != "AP Acct Nbr" && queryform.dropdown4.value != "Branch Nbr" && queryform.dropdown4.value != "Company Nbr" && queryform.dropdown4.value != "Employee Nbr" && queryform.dropdown4.value != "Tractor Nbr")
        querystring = querystring + "[" + queryform.dropdown4.value + "]=\"" +  queryform.query_text.value + "\""
        else querystring = querystring + "[" + queryform.dropdown4.value + "]=" +  queryform.query_text.value;
    }

 if(queryform.date1.value != "" && queryform.date2.value == "")
   querystring = querystring + " and "+date_index_choice+"=tstamp(" + reorder_date(queryform.date1.value) + ")";

 if(queryform.date1.value != "" && queryform.date2.value != "")
   querystring = querystring + " and "+date_index_choice+">=tstamp(" + reorder_date(queryform.date1.value) + ") and "+date_index_choice+"<=tstamp(" + reorder_date(queryform.date2.value) + ",23,59)";


//Check for null query string
 if(querystring == "") 
    {
    alert("This search requires Criteria and/or Date Range");
    return;
    }


  //alert(querystring); 
  //parent.document.frames(1).document.CypressQuery.DoQuery(querystring);
    top.open("http://mastodon.grhq.gfs.com:8080/DocumentViewer/Query.html?InitQuery="+querystring+"%20");
  }

function queryform_onsubmit()
  {
  submit_query();
  return(false);  
  }
</script>

html在这里:

<body onLoad="refill();" bgcolor="#FFFFFF" align="center">
<!-- Include the XML files with the report list for the drop down  -->
<XML src="MapFile.xml" ID="xml_map"></XML>
<XML src="GFS_RDM_rpt_inx.xml" ID="xmlDoc"></XML>

<form LANGUAGE="JScript" ONSUBMIT="return queryform_onsubmit()" name="queryform">
<div id="header">
        <p>Cypress Web Query</p>
</div>
<div id="main">
<div id="container1">
<div id="categories">
    <p>*Category:&nbsp;
    <select onchange="refill2(this.options.selectedIndex)" name="dropdown1">
        <option selected>--Select--</option>
    </select>
    </p>
    <p>*Subcategory:&nbsp;
    <select onchange="refill3(this.options.selectedIndex)" name="dropdown2">
        <option selected>--Select--</option>
    </select>
    </p>
    <p>*Report Name:&nbsp;
    <select onchange="load_indexes()" name="dropdown3">
        <option selected>--Select--</option>
    </select>
    </p>
    <p style="color:#505050">Criteria:&nbsp;
    <select id="dropdown4" name="dropdown4">
        <option selected>--Select--</option>
    </select>
    <input class="formFIELD" size="20" id="query_text" name="query_text" type="text">
    </p>
    <p style="font-size: medium">*Required fields in RED</p>
</div>
</div>

<div id="container2">
<div id="reportdates">
    <p>Report Dates between
        <input class="formFIELD" value="" size="10" id="datepicker1" name="date1" type="text">
    </p>
    <p>and
        <input class="formFIELD" value="" size="10" id="datepicker2" name="date2" type="text">
    </p>
        <input value="Submit" name="Submit" type="submit">&nbsp;&nbsp;&nbsp;&nbsp;<input value="Reset" id="Reset5" type="reset" name="Reset">
</div>
</div>
</div>
</form>
</body>

xml文件非常大,所以这里是一个结构概念的部分:

    <?xml version="1.0" ?>
    <Map_File file_use= "Mapping file for page indexes">
                    <category_list>
                                    <category obj_name= "Accounts Payable">
                                                   <sub_category obj_name="1099 Reports">
                                                                    <report_name obj_name= "AP145"/>
                                                                    <report_name obj_name= "AP245"/>
                                                   </sub_category>
                                                   <sub_category obj_name="A/P Close Reports">
                                                                    <report_name obj_name= "AP136 1 Invc Accrual"/>
                                                                    <report_name obj_name= "AP136 28 Invc Accrual"/>
                                                                    <report_name obj_name= "AP136 61 Invc Accrual"/>
                                                                    <report_name obj_name= "AP136 999 Invc Accrual"/>
                                                                    <report_name obj_name= "AP175 28 Invc Dist Close"/>
                                                                    <report_name obj_name= "AP1751 Invc Dist Close"/>
                                                                    <report_name obj_name= "AP1751 Out of Balance"/>
                                                                    <report_name obj_name= "AP1751 Invc Accr Entries"/>
                                                                    <report_name obj_name= "AP17561"/>
                                                                    <report_name obj_name= "AP175999 Invc Dist Close"/>
                                                                    <report_name obj_name= "AP175999 Out of Balance"/>
                                                                    <report_name obj_name= "AP175999 Invc Accr Entries"/>
                                                                    <report_name obj_name= "AP230"/>
                                                                    <report_name obj_name= "AP23028"/>
                                                                    <report_name obj_name= "AP230TH1 Open Payables Rpt"/>
                                                                    <report_name obj_name= "AP230999 Open Payables Rpt"/>
                                                                    <report_name obj_name= "GP162 Cash Disc Alloc"/>
                                                                    <report_name obj_name= "GP16228 Cash Disc Alloc - CAN"/>
                                                                    <report_name obj_name= "GP16261 Cash Disc Alloc"/>
                                                                    <report_name obj_name= "GP162TH Cash Disc Alloc"/>
                                                   </sub_category>
                                </category>
                </category_list>
</Map_File>

我确实不是网络开发人员我只是想让这个页面正常工作,因为它是我们其中一个应用程序的界面。任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

XML数据岛(HTML中的XML标记)仅受Internet Explorer支持。甚至微软也从IE 10开始删除支持:https://msdn.microsoft.com/en-us/library/hh801224(v=vs.85).aspx

这显然是很久以前的一些旧代码。您在Chrome中收到此错误的原因是因为Chrome以及可能是所有现代浏览器都无法识别XML标记以及与之相关的所有功能。

对不起,但您必须重写此代码才能使用现代支持的方法。