我正在尝试使用 jQuery+Ajax 调用自制的 vb.net Web 服务,但我正在努力解决细节问题。
这是一个作为 Web 方法公开的小函数:
<WebMethod()> <ScriptMethod(ResponseFormat:=ResponseFormat.Xml, UseHttpGet:=True)> _
Public Function GetAllVotes() As XmlDocument
Dim theVotes = getVotes()
Dim strResult As String = theVotes.XMLSerialize
Dim doc As XmlDocument = New XmlDocument()
doc.LoadXml(strResult)
Return doc
End Function
在查看网络后,我添加了 ScriptMethod 属性,因为我正在返回 XML,但如果是这种情况,请随时告诉我我不需要它们。
然后,在客户端,这是代码:
function getVotes() {
$.support.cors = true;
$.ajax({
type: "GET",
contentType: "application/json",
url: "http://nhrd635:8008/votingmanager.asmx/GetAllVotes",
data: {},
dataType: "xml text jsonp",
success: function(msg) {
// Hide the fake progress indicator graphic.
// Insert the returned HTML into the <div>.
$('#myPlaceHolder').html(msg);
},
error: function(msg) {
$('#myPlaceHolder').html(msg);
// alert(msg);
}
});
}
我已经尝试了许多.. 这段代码的许多变体,使用 post 或 get,更改内容类型,使用或不使用 charset=utf-8。数据上有和没有双引号:{}。
我使用 firebug 来跟踪我的请求的输出。只有当我将 dataType 设置为 jsonp 时,我才会得到结果,但在所有情况下,代码都会以“错误”函数结束,即使状态给出 200 OK。但我知道将其设置为 jsonp 是错误的,因为这会使我的 xml 被视为实际的 javascript ...
我从一个关于 encosia 的人那里读到了非常有用的博客文章。(示例:http ://encosia.com/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax/ )
但即使按照他的例子,我也无法获得适当的回报。
我做错了什么很明显吗?是我返回一个 xml 字符串而不是一个 json 序列化字符串的事实吗?