gpt4 book ai didi

javascript - 被迫处理 XML 文件中的 &,尝试解决解析错误 $.ajax({...})

转载 作者:行者123 更新时间:2023-12-02 16:52:38 25 4
gpt4 key购买 nike

我被迫处理一个包含多个 & 的 XML 文件,类似于:

<row>
<value>Boys & Girls</value>
</row>

这是我的方法:

$.ajax({
type : "POST",
url : "data.xml",
dataFilter : XMLFilter, //handles raw response data of XMLHttpRequest. pre-filtering to sanitize response.
async : false, //false means this has to complete before continuing
success : XMLLoadedSuccess, //to be called if the request succeeds.
error : function (XMLHttpRequest, textStatus, errorThrown) { debugger; },
complete : XMLLoadedComplete //called when the request finishes after success / error callbacks are executed
});

错误报告为:

textStatus : parse error
errorThrown : InvalidXML

深入研究这个错误,我 99.99% 确定它是贯穿始终的 & 符号。

我想也许可以使用 dataFilter 参数来清理响应,但这似乎只有在成功后才会被调用。我试图做类似的事情

function XMLFilter(data, type) {

data = data.replace("&", "and");

return data;
}

有了它,但这显然不是如何做到这一点。

然后我想,使用 php 加载/过滤掉 & 并编写一个新的 XML 文件,然后让 jQuery 使用它。这可能可行,但 XML 文件大小约为 500k。因此,也许有一个 cron 作业,每天只在生成新 XML 时执行一次。

攻击负责允许 & 的人也有一个选项,但我不知道它对最终用户有什么帮助。

有什么好的方法来处理这个问题吗?

最佳答案

您的$.ajax()未指定dataType。由于 url 设置具有 .xml 扩展名,JQuery 推断传输的数据是 XML(请参阅: http://api.jquery.com/jquery.ajax )。这是错误的,因为编码不正确。您必须使用 dataType: 'text' 表明您希望将数据作为文本传输,然后进行处理。

就您而言,数据处理涉及三个步骤:

  1. 将“&”替换为相应的 XML 实体:“&”
  2. 将结果字符串转换为 XML。
  3. 处理生成的 XML

可以这样写:

$.ajax({
...
url: "data.xml",
dataType: 'text',
success: function(data) {
var xml = jQuery.parseXML(data.replace("&", "&amp;"));
process(xml);
},
...
});

关于javascript - 被迫处理 XML 文件中的 &,尝试解决解析错误 $.ajax({...}),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26454465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com