2011-01-12 81 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(); 
相關問題