首頁 web前端 js教程 json實作前後台的相互傳值詳解_json

json實作前後台的相互傳值詳解_json

May 16, 2016 pm 04:22 PM
json

前後台的相互傳值如果值太多,寫的麻煩累人,且容易出錯。這裡整理出一套使用標記 標籤屬性的辦法來傳值, 後台取值和前台的綁定都有了大大的簡化。

一、把json物件轉成字串

複製程式碼 程式碼如下:

$.extend({
         //將json物件轉換成字串   [看似jquery沒有自帶的這種方法]
         toJSONString: function (object) {
             if (object == null)
                 return;
             var type = typeof object;
             if ('object' == type) {
                 if (Array == object.constructor) type = 'array';
                 else if (RegExp == object.constructor) type = 'regexp';
                 else type = 'object';
             }
             switch (type) {
                 case 'undefined':
                 case 'unknown':
                     return;
                     break;
                 case 'function':
                 case 'boolean':
                 case 'regexp':
                     return object.toString();
                     break;
                 case 'number':
                     return isFinite(object) ?object.toString() : 'null';
                     break;
                 case 'string':
return '"' object.replace(/(\|")/g, "\$1").replace(/n|r|t/g, function () {
                         var a = arguments[0];
                         return (a == 'n') ? '\n' : (a == 'r') ? '\r' : (n') ? '\n' : (a == 'r') ? '\r' : (a == 't') ?                      }) '"';
                     break;
                 case 'object':
                     if (object === null) return 'null';
                     var results = [];
                     for (var property in object) {
                         var value = $.toJSONString(object[property]);
                         if (value !== undefined) results.push($.toJString(property) ' undefined) results.push($.toJString(property) ':                      return '{' results.join(',') '}';
                    且休息;
                 case '陣列':
                     var 結果 = [];
                     for (var i = 0; i                          var value = $.toJSONString(object[i]);
                         if (value !== undefined) results.push(value);
                     }
                     return '[' results.join(',') ']';
                    且休息;
             }
         }
     });

二、建立資料容器物件 [用於綁定要傳給後台的前台控制項值]

複製程式碼程式碼如下:

 var DataClass = {
     create: function () {
                 return unction () {
                     this.MyInit.apply(this, arguments);//建立物件的建構子  //arguments 參數集合                  }
             }
 }
 var MyDataPack = DataClass.create();
 MyDataPack.prototype = {
     //初始化
     MyInit: function (url, operation, params) {
                 this.data = new Object();   //所有資料容量
                 var bdata = new Object();
                 bdata.url = url;            //位址
位址
                 bdata.operation = operation;//操作
                 bdata.params = params;      //參數
                 this.data.BasicData = bdata; //基本資料
             },
     //新增資料 如:addValue("obj", "111");
     addValue: function (p, obj) {
         this.data[p] = obj;
     },
     //取得 所有標記控制項的值 並寫入資料
     getValueSetData: function (togName) {
                 var values = Object(); //數值的集合
                 $("[subtag='" togName "']").each(function () {
                     //若是input 型態 控制
                     if (this.localName == "input") {
                         //若是text 控制
                         if (this.type == "text" || this.type == "hidden") {
                             values[this.id] = this.value
;                          }
                         else if (this.type == "...") {
                         }
                         //......
                     }
                     else if (this.localName == "...") {
                     }
                     //................
                 });
                 this.data[togName] = values;//新增至資料集合
             },
     //取值 如:getValue("BasicData")
     getValue: function (p) {
                 return this.data[p];
             },
     //取得或設定url
     getUrl: function (url) {
                 if (url)
                     this.data.BasicData["url"] = url;
                 else
                     return this.data.BasicData["url"];
             }
     ,
     //取值 轉成字串的物件 資料
     getJsonData: function () {
         return $.toJSONString(this.data);
     }
 }

三、建立綁定前台資料物件 [用來讀取後台傳過來的值,並綁定到前台頁面]

複製程式碼 程式碼如下:

var MyDataBinder = {
    //綁定資料到 控制項 data:資料 tag:標籤
    Bind: function (data, Tag) {
        var MJson = $.parseJSON(data);
        //只綁定 標記 了的 標籤
        $("[bindtag='" Tag "']").each(function () {
            if (this.localName == "input") {
                if (MJson[this.id]) //如果後台已傳遞價值了
                    $(this).attr("value", MJson[this.id]);
            }
            else if (this.localName == "...") {
            }
            //....
        });
    }
};

四、使用範例

前台html:

複製程式碼 程式碼如下:

 
    
        
        
        
    
    
        
        
        
           
 

前台js:

複製程式碼 程式碼如下:

//====================使用範例============================ ============
 var MyDataPack = new MyDataPack("Handler1.ashx", "CESHI", "");
 MyDataPack.getValueSetData("subtag");//將控制項資料寫入物件   「subtag」為要取 控制項 值 的標籤
 //-------------------傳前台值到後台---------------
 $.post(MyDataPack.getUrl(), MyDataPack.getJsonData(), function (data) {
     //-------------------綁定後台值到前台-----------------
     MyDataBinder.Bind(data, "bind");  //"bind" 為 要綁定控制項的 標籤
 });

後台:

複製程式碼 程式碼如下:

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "text/plain";
//====================取前台值=========================== ====================
    //因為後台傳過來的是 json物件 轉換後的字串  所以 所有資料都做為一個參數傳過來了
    var values = context.Request.Form[0];
    //需要引入組件System.Web.Extensions.dll
    JavaScriptSerializer _jsSerializer = new JavaScriptSerializer();
    //將 json 物件字串  轉換成 Dictionary 物件
    Dictionary> dic = _jsSerializer.Deserialize>>(values);
    //現在 dic 裡面就包含了 所有前台傳過來的值 想怎麼用 就怎麼用了。
    string inp_2 = dic["subtag"]["inp_2"];//這樣就直接取到了前台 頁面 id為 inp_2 的 控件value 值
//=====================傳值到前台======================= =====================
    Dictionary dic2 = new Dictionary();
    dic2.Add("inp_1", "修改1");//這裡只用對應控制項id 傳值即可
    dic2.Add("inp_2", "修改2");
    dic2.Add("inp_3", "修改3");
    context.Response.Write(_jsSerializer.Serialize(dic2));
}

小夥伴們對使用json實現前後台傳值是否了解清楚了呢,有問題的話,就給我留言吧

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1422
52
Laravel 教程
1316
25
PHP教程
1267
29
C# 教程
1239
24
golang WebSocket與JSON的結合:實現資料傳輸與解析 golang WebSocket與JSON的結合:實現資料傳輸與解析 Dec 17, 2023 pm 03:06 PM

golangWebSocket與JSON的結合:實現資料傳輸和解析在現代的Web開發中,即時資料傳輸變得越來越重要。 WebSocket是一種用於實現雙向通訊的協議,與傳統的HTTP請求-回應模型不同,WebSocket允許伺服器向客戶端主動推送資料。而JSON(JavaScriptObjectNotation)是一種用於資料交換的輕量級格式,它簡潔易讀

如何在Java中使用@Expose註解從JSON中排除一個欄位? 如何在Java中使用@Expose註解從JSON中排除一個欄位? Sep 16, 2023 pm 09:49 PM

Gson@Expose註解可用於標記欄位是否公開(包含或不包含)以進行序列化或反序列化。 @Expose註解可以採用兩個參數,每個參數都是一個布林值,可以採用值true或false。為了讓GSON對@Expose註解做出反應,我們必須使用GsonBuilder類別建立一個Gson實例,並且需要呼叫excludeFieldsWithoutExposeAnnotation()方法,它將Gson配置為排除所有沒有Expose註解的欄位進行序列化或反序列化。語法publicGsonBuilderexclud

PHP 數組轉 JSON 的效能最佳化技巧 PHP 數組轉 JSON 的效能最佳化技巧 May 04, 2024 pm 06:15 PM

PHP數組轉JSON的效能最佳化方法包括:使用JSON擴充和json_encode()函數;新增JSON_UNESCAPED_UNICODE選項以避免字元轉義;使用緩衝區提高循環編碼效能;快取JSON編碼結果;考慮使用第三方JSON編碼庫。

MySQL5.7和MySQL8.0的差別是什麼? MySQL5.7和MySQL8.0的差別是什麼? Feb 19, 2024 am 11:21 AM

MySQL5.7和MySQL8.0是兩個不同的MySQL資料庫版本,它們之間有以下一些主要差異:效能改進:MySQL8.0相對於MySQL5.7有一些效能改進。其中包括更好的查詢優化器、更有效率的查詢執行計劃產生、更好的索引演算法和平行查詢等。這些改進可以提高查詢效能和整體系統效能。 JSON支援:MySQL8.0引入了對JSON資料類型的原生支持,包括JSON資料的儲存、查詢和索引。這使得在MySQL中處理和操作JSON資料變得更加方便和有效率。事務特性:MySQL8.0引進了一些新的事務特性,如原子

使用golang中的json.MarshalIndent函數將結構體轉換為格式化的JSON字串 使用golang中的json.MarshalIndent函數將結構體轉換為格式化的JSON字串 Nov 18, 2023 pm 01:59 PM

使用golang中的json.MarshalIndent函數將結構體轉換為格式化的JSON字串在使用Golang編寫程式時,我們經常需要將結構體轉換為JSON字串,在這個過程中,json.MarshalIndent函數可以幫助我們實現格式化的輸出。下面我們將詳細介紹如何使用這個函數,並提供具體的程式碼範例。首先,讓我們建立一個包含一些資料的結構體。以下是示

C#開發中如何處理XML和JSON資料格式 C#開發中如何處理XML和JSON資料格式 Oct 09, 2023 pm 06:15 PM

C#開發中如何處理XML和JSON資料格式,需要具體程式碼範例在現代軟體開發中,XML和JSON是廣泛應用的兩種資料格式。 XML(可擴展標記語言)是一種用於儲存和傳輸資料的標記語言,而JSON(JavaScript物件表示)是一種輕量級的資料交換格式。在C#開發中,我們經常需要處理和操作XML和JSON數據,本文將重點放在如何使用C#處理這兩種數據格式,並附上

Jackson庫中註解如何控制JSON序列化和反序列化? Jackson庫中註解如何控制JSON序列化和反序列化? May 06, 2024 pm 10:09 PM

Jackson庫中的註解可控制JSON序列化和反序列化:序列化:@JsonIgnore:忽略屬性@JsonProperty:指定名稱@JsonGetter:使用獲取方法@JsonSetter:使用設定方法反序列化:@JsonIgnoreProperties:忽略屬性@ JsonProperty:指定名稱@JsonCreator:使用建構子@JsonDeserialize:自訂邏輯

使用PHP的json_encode()函數將陣列或物件轉換為JSON字串並格式化輸出 使用PHP的json_encode()函數將陣列或物件轉換為JSON字串並格式化輸出 Nov 03, 2023 pm 03:44 PM

使用PHP的json_encode()函數將陣列或物件轉換為JSON字串並格式化輸出,可以讓資料在不同的平台和語言之間進行傳遞和交換變得更加容易。本文將介紹json_encode()函數的基本用法,以及如何將JSON字串格式化輸出。一、json_encode()函數的基本用法json_encode()函數的基本語法如下:stringjson_encod

See all articles