【问题标题】:$.parseXML works in IE but not Firefox or Chrome$.parseXML 适用于 IE,但不适用于 Firefox 或 Chrome
【发布时间】:2013-10-11 13:00:59
【问题描述】:

我正在使用$.ajax 将数据库中的数据作为 JSON 对象返回。其中一个字段是有效的 XML(已存储在 SQL Server 中的一个 XML 字段中)。当我使用$.parseXML 提取 XML 数据时,在 IE(版本 9)中一切正常,但在 Firefox 或 Chrome 中没有任何乐趣。

我想我可能需要做 2 个单独的查询,其中一个只是根据 Google 搜索返回带有 contentType 作为文本/XML 的 XML 数据。目前,$.ajax 中的 returnType 是 JSON,.ashx 处理程序文件中的 contentType 也是如此(是的,它是一个 ASP 应用程序)。

有人可以在这里提供一些见解吗?

提前致谢, 大卫

示例:

function ParseXMLRecord(record) {
    var xmlDoc = $.parseXML(record);
    var $xml = $(xmlDoc);
    var Questions = $xml.find("Question"); 
    for (var x = 0; x < Questions.length; x++) {
        var test = Questions[x];
        for (var t = 0; t < Questions[x].childNodes.length; t++) {        
            if (Questions[x].childNodes[t].tagName == 'Response') {
                var controlId = '', value = ''; 
                for (var g = 0; g <  Questions[x].childNodes[t].childNodes.length; g++) {

                    var tagname = Questions[x].childNodes[t].childNodes[g].tagName;

                    if (tagname === 'Control') {

fails on firefox -->    controlId = Questions[x].childNodes[t].childNodes[g].text;

                          ...

================================================ =========================================

让我问这是一种不同的方式。这是我需要解析的 XML:

<ResponseSet>
  <Question>
    <Text>Laterality</Text>
    <Response>
      <Control>rbLateralityLft</Control>
      <Value>Left</Value>
    </Response>
  </Question>

等等……

基于以上,这条线在火狐上是行不通的:

controlId = Questions[x].childNodes[t].childNodes[g].text; // 也不是这个--> Questions[x].childNodes[t].childNodes[g].nodeTypedValue

【问题讨论】:

  • 请包含一些代码
  • 包括一些重现问题的代码(即一些 xml 和一个小例子)。在 chrome 和 ff 中说“不高兴”并不能告诉我们您遇到了什么错误或哪里出了问题。
  • 错误表示 controlId 未定义。我认为问题不再在于 XML 解析器,而在于我试图获取数据的方式。
  • 所以鉴于上面的 XML 片段,我想我在问如何遍历这个跨浏览器。我首先发布的内容适用于 IE 8 和 9,但不适用于 Firefox 或 Chrome

标签: jquery xml ajax json


【解决方案1】:

如果你使用jquery解析XML,那么也使用jquery来读取解析后的数据,例如:

var s = "<ResponseSet>  <Question>    <Text>Laterality</Text>    <Response>      <Control>rbLateralityLft</Control>      <Value>Left</Value>    </Response>  </Question><Question>    <Text>Laterality2</Text>    <Response>      <Control>rbLateralityLft2</Control>      <Value>Left2</Value>    </Response>  </Question></ResponseSet>";

var x = $.parseXML(s);
$.each($(x).children().children(), function (idx, data) {
    var questionText = $(data).find("Text").text();
    var control = $(data).find("Control").text();
    var value = $(data).find("Value").text();
    console.log(questionText + " - " + control + " - " + value);
});

http://jsfiddle.net/TNLer/

【讨论】:

    猜你喜欢
    • 2014-05-17
    • 2013-10-23
    • 1970-01-01
    • 2013-05-03
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多