jQuery AJAX To JSON Format 並回傳方法

  • 4948
  • 0
  • 2013-11-15

摘要:Jquery AJAX To Json 並回傳的方法

最近完成一個 Case,以往都是用 PostBack 方式,之前已聽過JSON, 但沒很了解,這幾天花時間了解,花很久時間才搞定此Function, 不過也從中了解 JSON 格式,回傳方法,Collection Dictionary,也讓自己又成長一步。
需求目的:當輸入客戶代號,隨即回傳,客戶名稱&業務負責人

參考網站有 :
http://www.itzhai.com/jquery-json-format-to-use-ajax-to-get-the-data.html
http://www.dotblogs.com.tw/hatelove/archive/2011/11/22/jquery-ajax-aspx-json.aspx
http://www.dotblogs.com.tw/hatelove/archive/2009/12/22/jqueryajax.aspx
http://code2study.blogspot.tw/search/label/C%23%20%E6%90%9C%E5%B0%8B%E6%AF%94%E5%B0%8D

 

1. 準備 Asp.net 頁面檔 (傳入值&並回傳)
 


$j('#ftcFormHolder_FpgForm_ucuxText05').blur(function (e) {     // 客戶代號
                $(this).val($(this).val().toUpperCase()); // 客戶代號轉大寫
                $j('#ftcFormHolder_FpgForm_ucuxText06').val(''); // 清空[客戶名稱]欄位
                // 若[ID]欄位為空
                if ($j(this).val() == '') {
                    return;
                }
                try {
                    var paramJSON = '{ "ID": "' + $j(this).val() + '"}'; // Request JSON
    //                alert (paramJSON);
                    // ajax 
                    $j.ajax({
                        type: 'POST',
                        url: '../CustomActions/UserService.asmx/GetUserJSON',
                        contentType: "application/json; charset=utf-8",
                        data: paramJSON,
                        dataType: 'json',
                        async: false,
                        success: function (response, textStatus) {      // .asmx 回傳值
                            jsonData = response;                        
                            if ((typeof response) != 'string') {        
                                if (response.d != null)                 // 若不為空
                                    jsonData = response.d;
                            }
    //                        alert(typeof(jsonData));
    //                        var obj = jQuery.parseJSON(jsonData);    // Function Parse Above jQuery 1.8  
    //                        alert(obj.HumanName);

                            var obj = jQuery.parseJSON(jsonData);      // Function Parse Above jQuery 1.8  
    //                           alert (jsonData);
                             $j('#ftcFormHolder_FpgForm_ucuxText04').val(obj.Sales);    //業務負責人
                             $j('#ftcFormHolder_FpgForm_ucuxText06').val(obj.CUNAME);   //客戶名稱
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            alert("ajax error (" + textStatus + ")." + "\n" + errorThrown);
                        }
                    });
                } catch (e) {
                      alert("無此家客戶 Error !!");      
//                    alert(e.message + " 無此家客戶 Error !!");
                }
            });

2. 建立一個 UserService.asmx 檔 接收值處理


/// 
    /// UserService 的摘要描述
    /// 
    [WebService(Namespace = "http://domainname/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    //[ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class UserService : System.Web.Services.WebService
    {
        [System.Web.Services.WebMethod]
        [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]

        public string GetUserJSON(string ID)
        {
            //Fpg.Workflow.Data.LogCentral.CurrentLogger.LogDebug("UserService.GetUserJSON(" + ID + ")");
            //m_oDbHelper = new Fpg.Workflow.Data.DbHelper();

            Dictionary oHtable = this.GetUserInfo(ID); // 取得使用者資料
            string szRtnJSON = this.ToJSON(oHtable); // 回傳JSON字串

            return szRtnJSON;
        }

        //[System.Web.Services.WebMethod(EnableSession = true)]
        //[System.Web.Script.Services.ScriptMethod()]

        //public string GetUserName(string ID)
        //{
        //    //Fpg.Workflow.Data.LogCentral.CurrentLogger.LogDebug("UserService.GetUserName(" + ID + ")");
        //    //m_oDbHelper = new Fpg.Workflow.Data.DbHelper();

        //    Dictionary oHtable = this.GetUserInfo(ID); // 取得使用者資料
        //    string szHumanName = string.Empty;
        //    if (oHtable != null && oHtable.ContainsKey("HumanName"))
        //        szHumanName = (string)oHtable["HumanName"];
            
        //    return szHumanName;
        //}

        private Dictionary GetUserInfo(string p_szCuId)
        {
            if (string.IsNullOrEmpty(p_szCuId))
                return null;

            IDataReader oReader = null;
            InitConn();
            DbCommand oCmd = this.m_oConn.CreateCommand();
            Dictionary oUserInfo = new Dictionary();

            try
            {
                oCmd.CommandType = CommandType.Text;
                oCmd.CommandText = string.Format("select CUNAME,Item16 from Matek_closeitems where CUID = '{0}'", p_szCuId);
                oReader = oCmd.ExecuteReader();

                while (oReader.Read())
                {
                    //int iFieldCount = oReader.FieldCount;
                    //for (int i = 0; i < iFieldCount; i++)
                    {   
                        oUserInfo.Add("CUNAME", oReader.GetValue(0).ToString());
                        oUserInfo.Add("Sales", oReader.GetValue(1).ToString());
                        //oUserInfo.Add("CUNAME", "xx科技");
                        //oUserInfo.Add("Sales", "王大明");
                    }
                }

                return oUserInfo;
            }
            finally
            {
                oReader.Dispose();
                oReader.Close();
                oCmd.Dispose();
                this.CloseConn();
            }
        }

        // 轉成 Json 格式 Example : { "CUNAME":"xx科技","Sales":"王大明" };
        private string ToJSON(Dictionary p_oHtable)
        {
            if (p_oHtable == null || p_oHtable.Count == 0)
                return string.Empty;

            System.Text.StringBuilder oJSON = new System.Text.StringBuilder();
            oJSON.Append("{ ");
            int iIndex = 0;
            foreach (string szKey in p_oHtable.Keys)
            {
                if (iIndex > 0)
                    oJSON.Append(", ");

                oJSON.AppendFormat("\"{0}\":", szKey);

                object oValue = p_oHtable[szKey];
                if (oValue == null)
                    oJSON.Append("null");
                else if (oValue is Boolean)
                    oJSON.Append(oValue.ToString().ToLower());
                else if (oValue is Int32)
                    oJSON.Append(oValue.ToString());
                else if (oValue is Double)
                    oJSON.Append(oValue.ToString());
                else
                    oJSON.AppendFormat("\"{0}\"", oValue.ToString());

                iIndex++;
            }
            oJSON.Append(" }");

            return oJSON.ToString();
        }

        #region conn
        Fpg.Workflow.Data.Db.DbFactory m_oDbfact = null;
        Fpg.Workflow.Data.Db.DbConnection m_oConn = null;

        private void InitConn()
        {
            if (m_oConn != null)
            {
                return;
            }
            if (m_oDbfact == null)
            {
                m_oDbfact = Fpg.Workflow.Data.Db.DbFactory.Instance();
            }

            m_oConn = m_oDbfact.CreateConnection();
            m_oConn.Open();
        }
        private void InitConn(string p_szConnName)
        {
            if (m_oConn != null)
                return;

            Fpg.Workflow.Data.ConnInfo oConnInfo = new Fpg.Workflow.Data.ConnInfo(p_szConnName);
            m_oConn = oConnInfo.GetConnection();

            m_oConn.Open();
        }
        private void CloseConn()
        {
            try
            {
                if (m_oConn != null)
                {
                    m_oConn.Close();
                    m_oConn = null;
                }
            }
            catch { }
        }
        #endregion