我有一个AJAX请求,它返回一个XML字符串,我想将其注入DOM。我的功能看起来像
$.ajax({
type: 'POST',
url: "myrequest",
data: postdata,
datatype: 'json',
success: function (arguments) {
newxmlstring = arguments.newxml;
oldnode = $("someselector specified in the arguments passed");
oldnode.replaceWith(newxmlstring);
}
});
这有效,但似乎replaceWith函数将所有nodeName
映射到服务器发送的响应的大写版本。我假设这是一个尝试使用jQuery来处理XML的怪癖?
例如,当我访问<data>asdf</data>
时,如果响应字符串为$(newnode)[0].nodeName
,我会'DATA'
。
是否有人知道如何处理新的XML,同时保留小写的nodeName
?
编辑:我的响应是JSON,因为它包含新的xml字符串和一些关于新xml节点附加位置的其他数据。所以如果可能的话,我宁愿保留datatype: 'json'
。
答案 0 :(得分:2)
XML(以及基于XML的语言) 作为XHTML),tagName保留大小写。在 HTML,tagName返回元素名称 以规范的大写形式。该 tagName的值与此相同 of nodeName。
一些搜索表明很多人都遇到过这个问题,尤其是选择器和XML(jQuery的find()区分大小写,而find()中使用的选择器是小写的。)
Here's a function其他人正在使用将字符串转换为可能适合您的XML:
$.text2xml = function(sXML) {
// NOTE: I'd like to use jQuery for this, but jQuery makes all
// tags uppercase
//return $(xml)[0];
var out;
try{
var dXML = ($.browser.msie)?new ActiveXObject("Microsoft.XMLDOM"):new DOMParser();
dXML.async = false;
}catch(e){ throw new Error("XML Parser could not be instantiated"); };
try{
if($.browser.msie) out = (dXML.loadXML(sXML))?dXML:false;
else out = dXML.parseFromString(sXML, "text/xml");
}
catch(e){ throw new Error("Error parsing XML string"); };
return out;
}
答案 1 :(得分:0)
尝试使用:
datatype: 'xml',
而不是'json',因为您正在检索XML响应。设置数据类型将导致它被正确解析为XML。