Javascript jqGrid在加载时卡住。。。因为XML无效

Javascript jqGrid在加载时卡住。。。因为XML无效,javascript,jquery,xml,jqgrid,Javascript,Jquery,Xml,Jqgrid,我有一个带有搜索框的表单,当输入字段中键入的值被发送到web服务时,web服务将XML数据返回给我,我将其输入jqGrid以显示结果列表。我得到了正确显示的结果,我遇到的问题是当没有找到匹配搜索条件的结果时,当这种情况发生时,web服务仍然返回一个带有通常标题但没有任何数据集的XML。发生的情况是,jqGrid显示“加载…”框,它会无限期地保持这种状态,搜索功能在重新加载网页之前不会工作 这是相关的JS代码: $("#buttonSearch").on("click", function() {

我有一个带有搜索框的表单,当输入字段中键入的值被发送到web服务时,web服务将XML数据返回给我,我将其输入jqGrid以显示结果列表。我得到了正确显示的结果,我遇到的问题是当没有找到匹配搜索条件的结果时,当这种情况发生时,web服务仍然返回一个带有通常标题但没有任何数据集的XML。发生的情况是,jqGrid显示“加载…”框,它会无限期地保持这种状态,搜索功能在重新加载网页之前不会工作

这是相关的JS代码:

$("#buttonSearch").on("click", function() {
    $("#jqSearch").setGridParam({url:"http://website/webservice=filter="+$("#inputSearch").val(),datatype:"xml" }).trigger("reloadGrid");
    $("#divSearchDialog").dialog("open");
});

$("#jqSearch").jqGrid({
    ajaxGridOptions: {
        contentType: 'application/soap+xml; charset=utf-8',
        timeout: 10000
    },
    datatype: 'local',
    xmlReader: { root:"NewDataSet", row:"Table" , repeatitems:false},
    colNames: ["_ItemGuid", "AssetType", "HostName", "SerialNumber", "Manufacturer", "Model", "Status", "SystemType", "OSName", "OSVersion", "OSType", "Env", "Details"  ],
    colModel: [
        { name: '_ItemGuid', index: '_ItemGuid', hidden:true, xmlmap:"_ItemGuid" },
        { name: 'AssetType', index: 'AssetType', xmlmap:"AssetType", width: 70 },
        { name: 'HostName', index: 'HostName', xmlmap:"HostName", width: 50 },
        { name: 'SerialNumber', index: 'SerialNumber', xmlmap:"SerialNumber", width: 180 },
        { name: 'Manufacturer', index: 'Manufacturer', xmlmap:"Manufacturer", width: 70 },
        { name: 'Model', index: 'Model', xmlmap:"Model", width: 80 },
        { name: 'Status', index: 'Status', xmlmap:"Status", width: 40 },
        { name: 'SystemType', index: 'SystemType', hidden:true, xmlmap:"SystemType" },
        { name: 'OSName', index: 'OSName', hidden:true, xmlmap:"OSName" },
        { name: 'OSVersion', index: 'OSVersion', hidden:true, xmlmap:"OSVersion" },
        { name: 'OSType', index: 'OSType', hidden:true, xmlmap:"OSType" },
        { name: 'Env', index: 'Env', hidden:true, xmlmap:"Env" },
        { name: 'Details', index: 'Details', hidden:true, xmlmap:"Details" },
    ],
    gridView: true,
    loadonce: true,
    viewrecords: true,
    emptyrecords: 'No results found matching your search criteria.',
    width: 960,
    height: 250,
    rowNum: 50,
    loadError: function(xhr,st,err) { 
        if (xhr.status!=200) {
             alert("Error "+xhr.status+" "+xhr.statusText+" loading grid "+this.id);
        }
    }
});
这就是有效的XML的外观:

<?xml version="1.0" encoding="utf-8" ?> 
<NewDataSet>
    <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
            <xs:complexType>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="Table">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="_ItemGuid" msdata:DataType="System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" /> 
                                <xs:element name="AssetType" type="xs:string" minOccurs="0" /> 
                                <xs:element name="HostName" type="xs:string" minOccurs="0" /> 
                                <xs:element name="SerialNumber" type="xs:string" minOccurs="0" /> 
                                <xs:element name="Manufacturer" type="xs:string" minOccurs="0" /> 
                                <xs:element name="Model" type="xs:string" minOccurs="0" /> 
                                <xs:element name="Status" type="xs:string" minOccurs="0" /> 
                                <xs:element name="SystemType" type="xs:string" minOccurs="0" /> 
                                <xs:element name="OSName" type="xs:string" minOccurs="0" /> 
                                <xs:element name="OSVersion" type="xs:string" minOccurs="0" /> 
                                <xs:element name="OSType" type="xs:string" minOccurs="0" /> 
                                <xs:element name="Env" type="xs:string" minOccurs="0" /> 
                                <xs:element name="Details" type="xs:string" minOccurs="0" /> 
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:choice>
            </xs:complexType>
        </xs:element>
    </xs:schema>
    <Table>
        <_ItemGuid>912da2ab-d717-678c-a5ad-bb1ece8bcf5f</_ItemGuid> 
        <AssetType>Virtual Machine</AssetType> 
        <HostName>MYSERVER</HostName> 
        <SerialNumber>VMware-42 21 8c 09 00 01 02 03-04 05 06 07 08 09 10 11</SerialNumber> 
        <Manufacturer>VMware, Inc.</Manufacturer> 
        <Model>VMware Virtual Platform</Model> 
        <Status>Active</Status> 
        <SystemType>Win64</SystemType> 
        <OSName>Windows Server 2008 R2 Standard</OSName> 
        <OSVersion>6.1</OSVersion> 
        <OSType>Win</OSType> 
        <Env>PROD</Env> 
        <Details>PROD</Details> 
    </Table>
</NewDataSet>
这是jquery.jqGrdid.min.js中触发它的部分:

if(d.p.gridview===!0&&(n=d.p.treeANode>-1?d.p.treeANode:0,d.p.grouping?g||(w.jqGrid("groupingRender",S,d.p.colModel.length,d.p.page,T),S=null):d.p.treeGrid===!0&&n>0?$(d.rows[n]).after(L.join("")):(Y.append(L.join("")),d.grid.cols=d.rows[0].cells)),d.p.subGrid===!0)
我尝试在ajaxGridOptions上设置一个超时,但这似乎没有起到任何作用,当我添加emptyrecords事件时也是如此。我还尝试使用loadError管理错误,但它似乎无法捕获错误。 我尝试了很多关于预处理的东西,但是我从来没能让它起作用


有人知道如何在jqGrid崩溃之前管理此错误吗?

看起来这是jqGrid 5.0.0的问题,我恢复到4.5.4,它开始完美工作。

看起来这是jqGrid 5.0.0的问题,我恢复到4.5.4,它开始完美地工作。

您在测试中使用了哪个jqGrid版本?我尝试使用不同的版本重现该问题:,和。我从来没有得到过你描述的错误。您在测试中使用了哪个jqGrid版本?您在测试中使用了哪种web浏览器?嗨,Oleg,我通常使用IE 11,因为这是这里内部使用的主要浏览器,但我也使用Firefox 38.0.1和Chrome 43进行了测试。我得到的结果都一样。我使用jqGrid 5.0.0,我相信这是最新版本。谢谢你的帮助。你试过我在之前的评论中发布的演示吗(点击评论中的链接)?演示使用了您的XML数据和代码,我没有看到您在问题中描述的任何错误。是的,我尝试过,它们似乎工作正常,我不明白。这个问题只会在我搜索没有结果的东西时触发。如果(d.p.gridview==!0&&(n=d.p.treeANode>-1?d.p.treeANode:0,d.p.grouping?g|124;|(w.jqGrid(“groupingRender”,S,d.p.colModel.length,d.p.page,T),S=null):d.p.treeGrid==!0&&n>0?$(d.rows[n])。在(L.join(“”)之后:(Y.append(L.join(“”),d.grid.cols=d.cols=d.sub.grid=!d.p=!sub.0)Firefox调试器说:TypeError:Y未定义您在测试中使用的jqGrid版本?我尝试使用不同的版本重现此问题:,和。我从来没有得到过你描述的错误。您在测试中使用了哪个jqGrid版本?您在测试中使用了哪种web浏览器?嗨,Oleg,我通常使用IE 11,因为这是这里内部使用的主要浏览器,但我也使用Firefox 38.0.1和Chrome 43进行了测试。我得到的结果都一样。我使用jqGrid 5.0.0,我相信这是最新版本。谢谢你的帮助。你试过我在之前的评论中发布的演示吗(点击评论中的链接)?演示使用了您的XML数据和代码,我没有看到您在问题中描述的任何错误。是的,我尝试过,它们似乎工作正常,我不明白。这个问题只会在我搜索没有结果的东西时触发。如果(d.p.gridview==!0&&(n=d.p.treeANode>-1?d.p.treeANode:0,d.p.grouping?g|124;|(w.jqGrid(“groupingRender”,S,d.p.colModel.length,d.p.page,T),S=null):d.p.treeGrid==!0&&n>0?$(d.rows[n])。在(L.join(“”)之后:(Y.append(L.join(“”),d.grid.cols=d.cols=d.sub.grid=!d.p=!sub.0)Firefox调试器说:TypeError:Y未定义
Unable to get property 'append' of undefined or null reference
if(d.p.gridview===!0&&(n=d.p.treeANode>-1?d.p.treeANode:0,d.p.grouping?g||(w.jqGrid("groupingRender",S,d.p.colModel.length,d.p.page,T),S=null):d.p.treeGrid===!0&&n>0?$(d.rows[n]).after(L.join("")):(Y.append(L.join("")),d.grid.cols=d.rows[0].cells)),d.p.subGrid===!0)