Jquery ajax傳遞對象(數組)到后台並解析的實現


今天在項目中,實現一個工作經歷列表功能,動態添加,數據需要傳遞到后台。

這里考慮到用戶體驗:該界面交互較多,多次添加和刪除都是用js實現的。

所以,最后傳遞數據到后台,我也是采用了jquery的ajax方法,讀取js的緩存數據(array),傳遞到ashx中。

這里有個問題就是:jquery傳遞對象/數組,無法傳遞,並且服務端無法獲取數據。

google了一下有一些解決方案:

參考資料:

再談jquery ajax方法傳遞到action - 一只博客 - 51CTO技術博客


http://cnn237111.blog.51cto.com/2359144/984466

ajax傳遞給后台數組參數方式 - lingxyd_0的專欄 - 博客頻道 - CSDN.NET


http://blog.csdn.net/lingxyd_0/article/details/10428785


完整解決方案:

1、js對象創建:因為需要把對象json序列化后,才能傳遞到后台,后台根據json字符串進行反序列化。

所以要求,在js中創建一個對象,與后台C#的實體對象一致。
function WorkEx(depart, title, begintime, endtime) {
    this.SuId = 0;
    this.Id = 0;
    this.DepartmentName = depart;
    this.Title = title;
    this.BeginTime = begintime;
    this.EndTime = endtime;
    this.Description = "";
    this.Enable = 0;
    return this;
}

WorkEx對象,與C#對象完全一致。

2、Jquery   $.ajax方法的配置

針對$.ajax方法的配置參數需要進行修改:

1)dataType: "json", traditional:true:數據類型必須是json。默認的話,traditional為false,即jquery會深度序列化參數對象,以適應如PHP和Ruby on Rails框架,
但servelt api無法處理,我們可以通過設置traditional 為true阻止深度序列化

2)這個是重點!需要把js對象進行json序列化,不然無法傳遞到服務端。
        data: {  Wl: JSON.stringify(WorkList) }

3)完整代碼:
  var AjaxUrl = "../../Service/sp.ashx";
  $.ajax({
        type: "post",
        dataType: "json", traditional:true,
        data: { Wl: JSON.stringify(WorkList) },
        url: AjaxUrl,
        success: function (data, textStatus) {
            if (data != null) {
                  
                if (data) {
                    alert("添加成功,系統將會跳轉到詳情界面。");
                    window.location.href = "SuspectList.html";
                }
                else {
                    $("#btnAdd").attr("disabled", false); $("#btnAdd").text("再次提交");
                }
            }
        },
        complete: function (XMLHttpRequest, textStatus) {
        },
        error: function (e) {
              
            $("#btnAdd").attr("disabled", false); $("#btnAdd").text("再次嘗試提交");
        }
    });

3、在服務器端進行反序列化:

1) 獲取到post過來的數據: string worklist = CustomResponse.GetResponse("Wl");

2)反序列化:

   
 List<SuspectWorkExperience> listwork = new List<SuspectWorkExperience>();
listwork = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SuspectWorkExperience>>(worklist);

 Newtonsoft.Json.JsonConvert是一個微軟的免費json轉換工具。

Newtonsoft.Json 是.NET 下開源的json格式序列號和反序列化的類庫.
官方網站: http://json.codeplex.com/
使用方法比較簡單
1.首先下載你需要的版本,然后在應用程序中引用Newtonsoft.Json.dll 文件.
IT分享Newtonsoft.Json <wbr>使用 <wbr>C#序列號json,反序列化對象

2.引用命名空間

IT分享Newtonsoft.Json <wbr>使用 <wbr>C#序列號json,反序列化對象


這樣就可以直接轉換成后台的實體了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM