被迫处理一个&在XML文件中,试图解决解析错误$.ajax({..})
Forced to deal with a & in an XML file, trying to resolve parse error $.ajax({...})
我被迫处理一个包含多个&中,类似于:
<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'
以text的形式传输数据,然后进行处理。
在您的案例中,数据处理涉及三个步骤:
- 用相应的XML实体替换"&"
- 将得到的字符串转换为XML
- 处理生成的XML
这可以写为:
$.ajax({
...
url: "data.xml",
dataType: 'text',
success: function(data) {
var xml = jQuery.parseXML(data.replace("&", "&"));
process(xml);
},
...
});
相关文章:
- AJAX HTTP基本身份验证解决方案
- 当我想发布一个变量但有 1 个 js 时,ajax post 的解决方案是什么
- AJAX后退按钮解决方案类似于facebook
- 使用jsonp解决方法进行同步ajax调用
- 如何调试/解决递归 AJAX 追加重复项
- 未解决的 PHP 页面刷新而无需 Ajax
- 关闭浏览器时使用 ajax 执行查询的解决方案
- 如果表格很大,我对表中元素的一点 ajax 会中断.如何解决
- 寻找实现AJAX TreeGrid的最佳解决方案
- 如何解决if-else条件下的ajax调用
- 如何知道哪个$.ajax承诺已经解决
- 转到URL下载文件,但AJAX返回403.为什么以及如何解决
- 如何解决ASP.NET中Ajax调用的授权问题
- 卸载/重新加载javascript或用于大量ajax内容的更好的解决方案
- 被迫处理一个&在XML文件中,试图解决解析错误$.ajax({..})
- Ajax无法使用Href(解决方案)
- 避免将ajax请求设置为同步的解决方案
- 设计一个比使用AJAX获得整个HTML文档更好的解决方案
- MongoDB+Node.js+AJAX解决方案,用于自动完成搜索
- 如何解决Uncaught TypeError:非法调用jquery ajax