Posted in Javascript onSeptember 26, 2011
还是先说一些基础知识:
语法:$.ajax({option})
option表示参数。以key/value形式出现。
常用参数:type:post/get。
url:发送请求的地址。
data:{object:object} 发送到服务器的数据,必须为key/value格式。可以设置processData属性,不转换数据格式。
success:function(msg){} 请求成功后回调函数。
error:function(msg){} 请求失败后回调函数。
dataType:xml/html/script/json/jsonp 返回的数据类型。
再看实例理解:
1.用Ajax实现无刷新审核功能(点击审核后,LinkButton不可用,并改为已审核)。
界面如下:
这里数据显示用的是Repeater控件,其中审核按钮为LinkButton服务器控件。
页面Html代码:
<body> <form id="form1" runat="server"> <div> <table width="100%" border="0" cellspacing="0" cellpadding="0" class="Main_List_Table" rules="none"> <tr class="Main_List_Table_Tr1"> <td width="5%"> 选择 </td> <td width="18%"> 单号 </td> <td width="15%"> 状态 </td> <td width="18%"> 店铺 </td> <td width="18%"> 购买者 </td> <td width="13%"> RMB </td> <td> 操作 </td> </tr> <asp:Repeater ID="rpt_Review" runat="server"> <ItemTemplate> <tr onmouseover="this.className='Main_List_Table_Tr_Over'" onmouseout="this.className='Main_List_Table_Tr_Out'"> <td> <input type="checkbox" id="OrderId_<%#Eval("OrderId") %>" name="OrderId" value="<%#Eval("OrderId") %>" /> </td> <td> <%#Eval("OrderId") %></a> </td> <td> <%# Eval("oState").ToString() %> </td> <td> 1号店铺 </td> <td> 张三 </td> <td> 100.00 </td> <td> <asp:LinkButton ID="lbtn_Audit_eShop_Price" runat="server">审核</asp:LinkButton> </td> </tr> </ItemTemplate> </asp:Repeater> </table> </div> <div class="padding_Top10"> <label for="sel_All" style="cursor: pointer"> <input type="checkbox" name="sel_All" id="sel_All" onclick="selectAll('sel_All', 'OrderId');" />全选/反选</label> <input type="button" id="btn_Batch_Review" onclick="return Batch_Review();" value="批量审核" /> </div> </form> </body>
实现代码如下:
a.脚本代码:
function lbtn_Audit_eShop_Price_Command(obj,orderId) { if (obj.innerHTML != "审核") return false; if (!confirm("确定要审核吗?")) { return false; } $.ajax({ type:"post",//Post发送方式 url:"AjaxTest.aspx",//请求地址为本页面地址 data:{OrderId:orderId,Action:"Single_Review"},//传入数据为订单号以及Action success:(function(msg){ if(msg!="") { var chkId = "OrderId_"+orderId; document.getElementById(chkId).disabled = "disabled"; obj.disabled = "disabled"; obj.innerHTML = "已审核"; } }) }); return false; }
b.服务器代码:
根据Action判断事件的执行。
protected void Page_Load(object sender, EventArgs e) { Conn.Open(); //执行动作 string Action = CommFun.Get_Safe_Str(Request["Action"]); if (!IsPostBack) { if (Action == "") { rpt_Pro_Order_List_Bind(); } else if (Action == "Single_Review") //点击审核 { lbtn_Audit_eShop_Price_Command(); } else //点击批量审核 { btn_Batch_Review_eShop_Price(); } } }
Repeater绑定数据后,为LinkButton添加onclick属性,用于执行页面脚本代码。
protected void rpt_Pro_Order_List_Bind() { …… this.rpt_Review.DataSource = Dt; this.rpt_Review.DataBind(); for (int i = 0; i < this.rpt_Review.Items.Count; i++) { LinkButton lbtn_Audit_eShop_Price = (LinkButton)this.rpt_Review.Items[i].FindControl("lbtn_Audit_eShop_Price"); if (Dt.Rows[i]["Audit_eShop_Price"].ToString() == "1") { lbtn_Audit_eShop_Price.Enabled = false; lbtn_Audit_eShop_Price.Text = "已审核"; } else { lbtn_Audit_eShop_Price.Enabled = true; lbtn_Audit_eShop_Price.Attributes.Add("onclick", "return lbtn_Audit_eShop_Price_Command(this, '" + Dt.Rows[i]["OrderId"].ToString() + "');"); } } } [code] 2.用Ajax实现无刷新批量审核。 注意:这里用到的控件必须是Html控件,否则会引起回发。但在Repeater内部服务器控件也可以使用。 这里只需给input="btton"添加一个onclick属性,直接执行Ajax脚本。 脚本内容如下: [code] //批量审核 function Batch_Review() { if(!checkSelItem("OrderId","请选择订单!")) return false; if(!confirm("确定要审核吗?")) return false; var OrderIds = ""; //记录所有订单号 var elements = document.getElementsByName("OrderId"); for (var m=0; m < elements.length; m++){ if(m == elements.length - 1) { OrderIds = OrderIds + elements[m].value; } else { OrderIds = OrderIds + elements[m].value + ","; } } var orderIdArr = OrderIds.split(','); var newOrderIdStr = ""; var j = 0;//记录选择的订单个数 var position = "";//记录选择的订单位置 for(var i = 0;i<orderIdArr.length;i++) { var chk_Id = "OrderId_"+orderIdArr[i]; if($_Id(chk_Id).checked)//记录选中的订单 { if(i == orderIdArr.length - 1) { newOrderIdStr += orderIdArr[i]; position += i; } else { newOrderIdStr += orderIdArr[i]+","; position += i + ","; } j++; } } newOrderIdStr = RemoveRightComma(newOrderIdStr);//去除末尾逗号后的订单号 position = RemoveRightComma(position);//去除末尾逗号后的位置 $.ajax({ type: "POST", url: "AjaxTest.aspx", data: { Order_Id_Arr: newOrderIdStr, Action: "Batch_Review" }, success: function(msg) { if (msg != "") { for(var k = 0 ;k<j;k++) { var newOrderIdArr = newOrderIdStr.split(','); var positionArr = position.split(','); $_Id("OrderId_"+newOrderIdArr[k]).disabled = "disabled"; if(parseInt(positionArr[k])<10) { $_Id("rpt_Review_ctl0"+parseInt(positionArr[k])+"_lbtn_Audit_eShop_Price").innerHTML = "已审核"; $_Id("rpt_Review_ctl0"+parseInt(positionArr[k])+"_lbtn_Audit_eShop_Price").disabled = "disabled"; } else { $_Id("rpt_Review_ctl"+parseInt(positionArr[k])+"_lbtn_Audit_eShop_Price").innerHTML = "已审核"; $_Id("rpt_Review_ctl"+parseInt(positionArr[k])+"_lbtn_Audit_eShop_Price").disabled = "disabled"; } } } } }) return true; } //去除右边逗号 function RemoveRightComma(str) { if(str == "") return; var i; for(i = str.length-1;i>=0;i--) { //charAt(i)取某一个位置的字符 if(str.charAt(i) != ",") break; } //截取字符串,substring(start,stop);返回的结果不包含最后一位 str = str.substring(0,i+1); return str; }
至此实例讲解结束。
最后回顾思路:
1.单条审核:在页面初始化时,给审核按钮加上onclick属性,执行页面脚本,单击审核后,后台的page_load事件根据Action选择执行的事件。
2.批量审核: 给批量审核按钮加上onclick属性,执行Ajax脚本,后台的page_load事件同样根据Action选择执行的事件。批量审核按钮必须为Html控件。
Jquery之Ajax运用 学习运用篇
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@