我被迫处理一个有多个&的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%确定它的&amp;符号遍布整个。
我想也许dataFilter参数可用于清理响应,但这似乎只有在成功后才会被调用。我试图做像
这样的事情function XMLFilter(data, type) {
data = data.replace("&", "and");
return data;
}
有了它,但那显然不是怎么做的。
然后我想,使用php加载/过滤掉&amp;并编写一个新的XML文件,让jQuery使用它。这可能有效,但XML文件大小为500k。所以也许有一个cron作业,每天只生成一次新的XML。
抨击负责允许&amp;在那里也有一个选项,但我不知道它将如何帮助最终用户。
什么是处理这个问题的好方法?
答案 0 :(得分:2)
您的$.ajax()
未指定dataType
。由于url
设置具有.xml扩展名,因此JQuery推断传输的数据是XML(请参阅:http://api.jquery.com/jquery.ajax)。这是错误的,因为&amp;编码不正确。您必须表明要将数据作为文字与dataType: 'text'
一起传输,然后进行处理。
在您的情况下,数据处理涉及三个步骤:
这可以写成:
$.ajax({
...
url: "data.xml",
dataType: 'text',
success: function(data) {
var xml = jQuery.parseXML(data.replace("&", "&"));
process(xml);
},
...
});