本文實例講述了jQuery調用Webservice傳遞json數組的方法。分享給大家供大家參考,具體如下:
Jquery由於提供的$.ajax強大方法,使得其調用webservice實現異步變得簡單起來,可以在頁面上傳遞Json字符串到Webservice中,Webservice方法進行業務處理後,返回Json對象給頁面,讓頁面去展現。
這一切都非常的簡單,今天要學習的並非這些。我們在實際處理業務過程中,會發現往往頁面要傳遞給webservice 的並非一個或多個字符串,有時候需要傳遞的是一個組合數據,如這樣的一組數據:
復制代碼 代碼如下:{'Employee': [{'name':'John','sex':'man','age':'25'},{'name':'Tom','sex':'man','age':'21'}]}
客戶端將這樣的Json字符串作為$.ajax方法的data參數是沒有問題的,然而,服務端的webservice該如何去寫接收參數卻成為了一個問題。在百度、谷歌了一番後,只發現提問的卻沒有回答的。索性還是自己去研究吧,發現其實Employee對象首先是一個數組,其次數組的每一項都是一個Dictionary<string,string>字典類型。於是我嘗試在服務端使用Dictionary<string,string>[] Employee來接收客戶端傳遞的參數,一切如我所料,成功!
客戶端代碼如下:
//JQuery 調用webService導入數據
function LoadData() {
var studentData = CollectionData();
$.ajax({
url: "ImportDataService.asmx/ImportStu",
type: "post",
contentType: "application/json;charset=utf-8",
dataType: "json",
data: "{'students':[{'name':'KoBe ','sex':'boy','age':'20'},{'name':'Mary','sex':'girl','age':'19'}]}",
success: function(result) {
alert(result.d);
},
error: function(e) {
alert(e.responseText);
}
});
}
服務端代碼如下:
/// <summary>
///
/// </summary>
/// <param name="students"></param>
/// <returns></returns>
[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public string ImportStu(Dictionary<string,string> []students)
{
if (students.Length == 0)
{
return "沒有任何數據!";
}
else
{
try
{
foreach (Dictionary<string, string> stu in students)
{
//構造一個新的Student對象。
Student student = new Student();
//為新構造的Student對象屬性賦值。
foreach (string key in stu.Keys)
{
switch (key)
{
case "name":
student.Name = stu[key];
break;
case "sex":
student.Sex = stu[key];
break;
case "age":
int age;
if (Int32.TryParse(stu[key], out age))
{
student.Age = age;
}
else
{
student.Age = 0;
}
break;
default:
break;
}
}
}
return "導入學生成功!";
}
catch
{
throw new Exception("導入學生失敗!");
}
}
}
需要注意的是,服務端參數名需要和客戶端Json數組的key值相同,如上代碼中,參數名都為students。