【问题标题】:getting the raw data from a jQuery parseXML tag. Safari error从 jQuery parseXML 标签获取原始数据。 Safari 错误
【发布时间】:2014-02-13 00:42:37
【问题描述】:

我遇到以下问题。在 jQuery get 函数的回调中,我有以下代码。

x = $.parseXML(data)
xmlDoc = $(x)
y = xmlDoc.find("message")
msg = y.html()

if msg == "MISSING FILE"
    # do something about the missing file
else
    # xmlDoc IS the document I want.

换句话说,我正在从服务器返回一些东西。如果它是带有“MISSING FILE”的“message”标签的 XML 文档,那么我会处理它。如果不是,我照常使用那个 XML 文档。

此代码在 Firefox 中运行良好。但是在 Safari 中,在 MISSING FILE 情况下,当我尝试使用 y.html() 时,jQuery 会爆炸,并给出以下错误:

TypeError: 'undefined' is not an object (evaluating 'n.innerHTML.replace') 

看起来y的值是

[<message>MISSING FILE</message>]

但 Safari 上的 jQuery 无法对其执行 .html()。

【问题讨论】:

  • 在尝试获取 html 之前,您能否检查 y.length 的长度
  • 是....我只是想确保它能够找到元素...所以如果您尝试console.log(y.length)并且它返回1,那么我们可以考虑为什么.html()不工作,否则我们将不得不弄清楚为什么find() 不工作......
  • 如果是 ajax 请求,则为 ajax 请求设置 dataType: 'xml',这样您就可以在处理程序中获取已解析的文档,而不必自己解析
  • @interstar 你能console.log($($.parseXML(data.toLowerCase())).find('message')[0]) 吗?
  • @interstar 尝试将前 4 行更改为 msg = $($.parseXML(data.toLowerCase())).find('message')[0].innerHTML

标签: jquery xml-parsing safari


【解决方案1】:

好的。感谢@AdamMerrifield 和@ArunPJohny 的提示,我对 find() 返回的对象的键进行了更多调查。

在 Safari 上它肯定没有 innerHTML。

最后我发现了

x = $($.parseXML(data.toLowerCase())).find('message')[0]
msg = x["textContent"]

成功了。 ["textContent"] 似乎在 Linux 上的 Chromium 和 Firefox、Mac 上的 Safari 和 Firefox 以及我的 Android 平板电脑上的 Chrome 上产生相同的结果。

仍然需要在 IE 上进行测试(可能会出现严重错误)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2021-10-31
    • 2023-02-01
    • 2018-04-05
    相关资源
    最近更新 更多