2011-01-12 58 views
1

我创建了一个jQuery的收集,存储XML如下:如何jQuery集合转换为XML字符串Ajax请求

var rh_request = $('<request/>') 
.attr('user_id', user_id) 
.attr('company_id', company_id) 
.attr('action', 'x'); 

我想通过Ajax请求将其发布到我的服务器如下:

$.ajax({ 
type: "POST", 
url: mywebsiteURL, 
processData: false, 
dataType: "xml", 
data: rh_request.html(), 
success: mycallbackfunction 
}); 

我的问题是,ajax调用的“数据”参数需要一个字符串版本的XML,它似乎既没有Jquery的.html()或.text()函数产生此。我有更老的代码使用直接的JavaScript来形成传出的XML并调用DOM .xml()函数产生了一个工作的字符串。这是如何做一个jquery集合?

+0

我编辑它,使之更具可读性... – Reigel 2011-01-12 02:55:53

回答

0

尝试

data: $('<div>').append(rh_request).html(), 
0

我经历过同样的问题,发现jQuery的当您尝试使用它来生成XML的一个小缺点。就我而言,我发现它会将元素和属性名称缩写为小写,并将0转换为空字符串,具体取决于您如何设置它。我最终放弃使用jQuery和JavaScript的组合来生成XML。

我用下面的函数来产生一个对象,设置属性,然后调用toXml()来为它检索XML。

var $encoder = $("<div/>"); 
function getNewNode(nodeName) { 
    return $.extend({}, { 
     "nodeName": nodeName, 
     attr: {}, 
     content: "", 
     toXml: function() { 
      // NOTE: change how XML is encoded here to fit your needs 
      var xml = "<" + this.nodeName; 
      $.each(this.attr, function(attrName, attrValue) { 
       xml += " " + attrName + '="' + $encoder.text(attrValue || "").html() + '"'; 
      }); 

      return xml + ">" + this.content + "</" + this.nodeName + ">"; 
     } 
    }); 
} 

使用上面的,你应该能够做这样的事情:

var request = getNewNode("request"); 
$.extend(request.attr, { "user_id": user_id, "company_id": company_id, "action": "x" }); 
var requestXml = request.toXml();