我正在嘗試使用jQuery + Ajax調用自制的vb.net Web服務,並且我正在努力解決具體問題。從jQuery + Ajax調用.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);
}
});
}
我試過這段代碼的很多..許多變化,利用職務或獲得,改變內容類型,有無字符集= UTF-8。有和沒有雙引號的數據:{}。
我使用螢火蟲跟蹤輸出我的要求。只有當我將dataType設置爲jsonp時,我是否會得到結果,但是在所有情況下,代碼都以「error」函數結束,即使狀態爲200 OK。但我知道把它設置爲jsonp是錯誤的,因爲這使得我的xml被視爲實際的javascript ...
我已經閱讀了非常有用的博客條目,從一個傢伙在encosia上。 (樣本:http://encosia.com/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax/)
但即使他的例子,我無法得到正確的回報。
我在做什麼錯誤,這是非常明顯的?這是事實,我返回一個XML字符串,而不是一個JSON序列化的字符串?
OK,這是有道理的,可惜的是這個腳本有運作跨域。簡而言之,我試圖在我們的網站上重新創建SharePoint 2010的投票功能,該功能的投票功能由好管理員禁用....所以我們想通過創建一個可以通過sharepoint web運行的WS來創建我們自己的投票功能服務。無論如何,就像我提到的那樣,當使用jsonp數據類型時,firebug會看到一個響應。即使它落在「錯誤」處理程序中,是否有可能從錯誤處理程序中讀取jquery的響應,然後以某種方式破壞我的方式重新投射它/重新將其轉換回html? – Stephane
@Stephane:如果您不控制遠程服務器,則另一種選擇是在本地服務器上使用HttpHandler作爲不違反同源策略的中繼:http://encosia.com/use -asp-nets-httphandler-to-bridge-the-cross-domain-gap/ –
再次,有趣的是,你似乎在最近幾乎所有問題上都發表了博文......在意識到不可能獲得ajax響應即使是jsonp形式,我也決定我最簡單的選擇是將我的web服務「轉換」爲一系列小型網頁,我可以通過一個簡單的獲取請求進行調用,但這很醜陋。我不明白你的HttpHandler的所有內容,但看起來很有希望。非常感謝您的幫助,我們非常感謝。 – Stephane