摘要: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