實現功能:前端html頁面,填入相應的預約信息提交到后台返回並返回信息
1.前端ajax代碼
<script type="text/javascript">
$(function () {
//表單提交
$("#btnSubmit").click(function () {
var txtname = $("#txtname").val();
var txttel = $("#txttel").val();
var txtOrderDepartment = $("#txtOrderDepartment").val();
var txtOrderTime = $("#txtOrderTime").val();
var txtOrderDescription = $("#txtOrderDescription").val();
if (txtname == null || txtname == "") {
alert("用戶名不能為空!");
}
else
{
$.ajax({
type: "POST",
url: "../../tools/submit_ajax.ashx?action=order_add",
dataType: "json",
data: { txtname: txtname, txttel: txttel, txtOrderDepartment: txtOrderDepartment, txtOrderTime: txtOrderTime, txtOrderDescription: txtOrderDescription },
success: function (data, msg) {
if (data.status == 1) {
alert(data.msg);
}
else {
alert(data.msg);
}
}
});
}
});
});
</script>
2.Ashx文件中相應代碼
public void ProcessRequest(HttpContext context)
{
//取得處事類型
string action = DTRequest.GetQueryString("action");
switch (action)
{
case "comment_add": //提交評論
comment_add(context);
break;
case "comment_list": //評論列表
comment_list(context);
break;
}
}
#region 用戶預約=====================================
private void order_add(HttpContext context)
{
DTcms.Model.article_comment model = new Model.article_comment();
model.user_name = DTRequest.GetFormString("txtname").Trim();//姓名
model.reply_content = DTRequest.GetFormString("txttel").Trim();
model.add_time = DateTime.Now;//添加預約的時間
model.reply_time = Convert.ToDateTime(DTRequest.GetFormString("txtOrderTime").Trim());
model.content = DTRequest.GetFormString("txtOrderDepartment").Trim()+" | "+DTRequest.GetFormString("txtOrderDescription").Trim();//預約描述
//DTRequest.GetFormString("txtOrderDepartment").Trim()+預約科室\
model.channel_id = 27;
string userip = DTRequest.GetIP();
DTcms.BLL.article_comment bll = new BLL.article_comment();
//保存注冊信息
if (siteConfig.commentstatus == 0)
{
context.Response.Write("{\"status\":0, \"msg\":\"系統故障,暫停預約!\"}");
return;
}
//設置對應的狀態
int newId = bll.Add(model);
if (newId < 1)
{
context.Response.Write("{\"status\":0, \"msg\":\"系統故障,請聯系網站管理員!\"}");
return;
}
else
{
context.Response.Write("{\"status\":1, \"url\":\"" + new Web.UI.BasePage().linkurl("index") + "\", \"msg\":\"預約成功!\"}");
}
return;
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------后續更新----------------------------------------------------------------------------------------------------
距離上段博客已有兩年未更新了,今日遇到了ajax中的一個問題,解決后省了好大的麻煩,於是乎貼出來供大家參考~!
前端ajax代碼如下:
<script type="text/javascript"> //根據父級ID顯示二級分類 function GetLevelTwo(parentCode) { var strTwoLevel=""; $.ajax({ type: "POST", url: "ashx/confirmLuckDraw.ashx?action=GetCodes", dataType: "text", data: { ParentCode: parentCode }, success: function (data) { var myObject = eval('(' + data + ')'); myObject = eval(myObject.Table); for (var i = 0; i < myObject.length; i++) { strTwoLevel += "<div class=\"list_box\"><a href=\"List.aspx?Code="+myObject[i].Code+"\" class=\"title\" title=\"" + myObject[i].Name + "\"><h3>" + myObject[i].Name + "</h3></a><div class=\"box\">" + GetLevelThree(myObject[i].Code) + "</div></div>"; } $("#firstlevel").html(strTwoLevel); } }); } //根據父級ID顯示三級分類 function GetLevelThree(parentCode) { var strThree = ""; $.ajax({ async: false, type: "POST", url: "ashx/confirmLuckDraw.ashx?action=GetThreeCodes", dataType: "text", data: { ParentCode: parentCode }, success: function (data) { strThree = data; } }); return strThree; }
上述代碼中,在一個ajax中將一個div標簽的內容填充,其中填充的內容又調用另外一個ajax方法獲取可得。之前沒有寫屬性:async:false;即默認async屬性默認為true.
也就是說在執行這個ajax的時候不管服務器端有沒有返回到前端值都將往下執行,故在ajax執行完畢后不管有沒有值,在ajax括號外,這個變量一直為空。
加過這個async為false之后,問題得到解決。
官方解釋如下:
async默認的設置值為true,這種情況為異步方式,就是說當ajax發送請求后,在等待server端返回的這個過程中,前台會繼續執行ajax塊后面的腳本,直到server端返回正確的結果才會去執行success,也就是說這時候執行的是兩個線程,ajax塊發出請求后一個線程和ajax塊后面的腳本(另一個線程)
當把asyn設為false時,這時ajax的請求時同步的,也就是說,這個時候ajax塊發出請求后,他會等待在function1()這個地方,不會去執行function2(),知道function1()部分執行完畢。