2013-06-26 44 views
0

這是我的JQuery AJAX調用。這是在document.ready()函數內部。推測這是一個將讀取將WebMethod在我的web服務返回的XML數據:如何將xml數據從webservice返回到jquery ajax從webform調用

  $.ajax({ 
       type: "POST", 
       url: "http://tempuri.org/NewsletterList.asmx/HelloWorld", 
       contentType: "application/xml; charset=utf-8", 
       dataType: "xml", 
       success: function (xml) { 
        $(xml).find('Newsletter').each(function() { 
         var title = $(this).find('Title').text(); 
         var created = $(this).find('Created').text(); 
         AddOption(title); 
         alert('Ywes'); 
        }); 
       }, 
       error: function (msg, m2, m3) { 
        alert(m2); 
       } 
      }); 

這是我的web服務我的webmethod電話。我能夠完全創建xml成功,但我發現難以將xml返回給ajax調用。

[WebService(Namespace = "http://tempuri.org/")] 
    . 
    . 
    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
    public XmlDocument HelloWorld() 
    { 
     //Instantiate model object 
     nl = new Newsletter(); 

     //Initiate XML stuff 
     StringBuilder sb = new StringBuilder(); 
     XmlWriterSettings settings = new XmlWriterSettings(); 
     XmlWriter writer = XmlWriter.Create(sb, settings); 

     writer.WriteStartDocument(); 
     writer.WriteStartElement("Root"); 

     foreach (Newsletter nls in nl.GetNewsletterList()) 
     { 
      writer.WriteStartElement("Newsletter"); 
      writer.WriteElementString("Title", nls.Title); 
      writer.WriteElementString("Created", nls.Created.ToString()); 
      writer.WriteEndElement(); 
     } 

     writer.WriteEndElement(); 
     writer.WriteEndDocument(); 
     writer.Flush(); 

     XmlDocument xmlDocument = new XmlDocument(); 
     xmlDocument.LoadXml(sb.ToString()); 
     return xmlDocument; 
    } 

回答

2

使用Web服務,您不需要像您一樣手動構建xml。你應該做的是返回你的C#對象的原始形式。您應該有以下代碼:

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
public List<Newsletter> HelloWorld() 
{ 
    //Instantiate model object 
    return new Newsletter().GetNewsletterList(); 


} 

ASP.NET會將您的對象序列化爲xml給你。

而且在你的JavaScript,你需要使用.find使用 像這樣前解析XML:

.success(function(data){ 
    var xml = $.parseXml(data); 
    xml.find(yadayadayada..... 
}); 
+0

謝謝,它沒有自動序列化我的對象,但是,它仍然失敗,當它到達JQuery的一部分,我試圖提醒參數拋出我的錯誤:函數,但只有第二個有文本,它只是說'錯誤' – Nizzy

+0

我不相信jquery的目的是遍歷任何ol html fyi我相信你需要使用$ .parseXml http://api.jquery.com/jQuery.parseXML/ – bluetoft

+0

如果你使用像firebug或chrome開發工具這樣的網絡檢查器,網絡請求是什麼樣子的?您是否碰到了您的成功方法或您的錯誤方法? – bluetoft

0

感謝您對您的建議。事實證明,它有什麼可做的瀏覽器。當我使用CDN時,錯誤函數中的第三個參數表示映射中存在某種異常。我使用Google搜索它:「失敗nsresult:」0x80004005(NS_ERROR_FAILURE)「,但只能找到一個類似的錯誤,我試了它在IE10,它的工作原理!

相關問題