我有一个
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节点附加位置的其他数据.所以我更愿意保留数据类型:’json’,如果可能的话.
解决方法
From this answer:
In XML (and XML-based languages such
as XHTML),tagName preserves case. In
HTML,tagName returns the element name
in the canonical uppercase form. The
value of tagName is the same as that
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; }