这是我的JQuery AJAX调用。这是在document.ready()函数内部。这应该是读取我的webservice中webmethod返回的xml数据的那个:
$.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);
}
});
这是我在webservice中的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;
}
答案 0 :(得分: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.....
});
答案 1 :(得分:0)
感谢您的所有建议。事实证明它与浏览器有关。当我使用CDN时,错误函数中的第三个参数表示映射中存在某种异常。我使用google搜索:“失败nsresult:”0x80004005(NS_ERROR_FAILURE)“但只能找到类似的错误。我在IE10中尝试过它可以工作!