默認情況下,ASMX的Web服務返回soap格式的數據
ajax調用一般使用Json格式的數據。要支持Json格式的數據返回值,可以取消Web服務類前面的 ScriptService註釋。這樣,該Web服務就可以支持ajax調用,參數和返回類型都是Json格式了。
但是,如果你在瀏覽器中測試該Web服務,會發現返回的仍然是xml格式的。這是因爲Web服務會自動根據請求的數據類型返回不同的數據格式。使用瀏覽器發出請求時,沒有指定數據格式,仍然會使用xml格式。如果需要json格式的結果,可以使用jquery中的ajax調用。
例1:使用ajax調用
Web服務代碼:
[System.Web.Script.Services.ScriptService]
public class WebServiceHello : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string[] UserDetails()
{
return new string[] { "abc", "def" };
}
}
網頁的javascript腳本:
function hello() {
$.ajax({
url: "WebServiceHello.asmx/UserDetails",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
data: "{}",
success: function(json) {
alert(json.d);
},
error: function(x, e) {
alert(x.responseText); ;
},
complete: function(x) {
alert(x.responseText);
}
});
}
hello();
如果是在其它應用程序中調用這個Web服務器,那麼要在請求中添加一個Header:
Content-Type: application/json
例:使用curl命令以json格式調用
curl -d "" "http://localhost:30568/WebServiceHello.asmx/UserDetails" -H "Content-Type: application/json"
返回的內容如下:
{"d":["abc","def"]}
注意:結果會封裝在名爲d的數據成員中。目前我沒有辦法去掉這個封裝。