html通过一般处理程序ashx调用服务器

1. 在JQuery框架下,发起请求的html,如下:

<html>
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>Document</tile>
		<script src="lib/jquery-3.4.1.min.js"></script>
	</head>
	<body>
		<div>		
			<table id="tbSubject">
			</table>
		</div>
		<script>
			$(function(){ // Jquery的页面Load事件,载入页面后执行
				stringRender(); // 对服务器进行调用,并将结果渲染进页面
			
				// 因为一般处理程序ashx入口不多,所以在请求值中设定一个mark值,mark值表明我们要请求的函数名称。参数可以设定在请求值中,也可以在之前的aspx调用中,保存在Session会话中。
				function getServerReturn(){
					subjects = [];
					$.ajaxSettings.async = false; // 关闭异步,否则返回结果的渲染必须写进回调函数中。关闭异步,同步等待回调结束。
					$.post("/Controller/ServerReturn.ashx",{mark: "getReturn"}, function(res){
						// 此处为调用服务器后的,返回函数,参数res是返回的结果
						subjects = $.parseJSON(res); // 将JSON字符串解析为对象
						console.log(res);
					});
					
					return subjects; // 因为关闭异步,所以会等待回调后再返回
				}

				function stringRender(){
					var subjects  = getServerReturn();
					for(var i = 0; i < subjects.length; i++){
						var subject = subjects[i];
						// 将获取的值绑定到标签里面去
						// Lable包裹input,  这样选中字,就能选中单选框
						var item = '
							<tr>
								<td>
									<p>${i+1}.${subject.Stem}</p>
									${subject.Image != null ? '<img src="${subject.Image}" alt="配图" />' : ''}
									<p>
										<lable> 
											<input type="radio" name="${subject.Id}" value="A" /> A.${subject.OptionA}
										</lable>
									</p>
									
									<p>
										<lable> //这样选中字,就能选中单选框
											<input type="radio" name="${subject.Id}" value="B" /> B.${subject.OptionB}
										</lable>
									</p>
									
									<p>
										<lable> //这样选中字,就能选中单选框
											<input type="radio" name="${subject.Id}" value="C" /> C.${subject.OptionC}
										</lable>
									</p>
									
									<p>
										<lable> //这样选中字,就能选中单选框
											<input type="radio" name="${subject.Id}" value="D" /> D.${subject.OptionD}
										</lable>
									</p>						
								</td>
							</tr>
						';
						
						$("#tbSubject").append(item); // 找到表格标签,将要渲染的标签插入进去
					}
				}	
			})
		</script>
	</body>
</html>

2. 服务器端的ServerReturn.ashx,如下:

// 在一般处理程序ashx中获取Session会话,必须继承IRequiresSessionStata接口
public class ServerReturn : IHttpHandler, IRequiresSessionStata
{
	public void ProcessRequest(HttpContext context)
	{
		context.Response.ContentType = "text/plain";
		var mark = content.Request["mark"];
		if(mark == "getReturn") // 根据mark标记判断请求的是哪个方法
		{
			// 此处假设apsx页面在前面已经保存一个会话id,此处读取id值调用服务器结果
			string id = context.Session["id"].ToString();
			var res = new ServerBLL().getServe(id); // 假设id值调用到服务器结果了
			JavaScriptSeriallizer json = new JavaScriptSeriallizer(); // 调用API将结果进行JSON序列化
			context.Response.Write(json.Serialize(res)); // 将结果返回到客户端
		}

		if(mark = "getExamInfo"){
			var examId = Convert.ToInt32(context.Session["eid"]);
			var totalTime = new ExaminationsBLL().ListById(examId).First().ExaminationDuration.ToString();
			context.Response.Write(totalTime);
		}
	}

	public bool IsReusable
	{
		get{
			return false;
		}
	}
}

3. 不采用JQuery框架,JsRender框架下,发起请求的html,如下:

<html>
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>Document</tile>
		<script src="lib/jquery-3.4.1.min.js"></script>
		<script src="lib/jsrender.min.js"></script>
	</head>
	<body>
		<div>		
			<table id="tbSubject">
			</table>
		</div>
		<script id="subjectTalbeJr" type="text/x-jsrender">
			<tr>		
				<td>
					<p>{{:#index+1}}.{{:Stem}}</p> // :#index是JsRender绑定的序号关键字;:stem是对象属性
					<p>
						<if :Image != null>
							<img src="{{:Image}}" alt="这是配图" />
						</if>
					</p>
					<p>
						<lable> 
							<input type="radio" name="{{:Id}}" value="A" /> A.{{:OptionA}}
						</lable>
					</p>
					
					<p>
						<lable> //这样选中字,就能选中单选框
							<input type="radio" name="{{:Id}}" value="B" /> B.{{:OptionB}}
						</lable>
					</p>
					
					<p>
						<lable> //这样选中字,就能选中单选框
							<input type="radio" name="{{:Id}}" value="C" /> C.{{:OptionC}}
						</lable>
					</p>
					
					<p>
						<lable> //这样选中字,就能选中单选框
							<input type="radio" name="{{:Id}}" value="D" /> D.{{:OptionD}}
						</lable>
					</p>						
				</td>
			</tr>
		</script>
		<script>
			$(function(){ // Jquery的页面Load事件,载入页面后执行
				jsRendering(); // 对服务器进行调用,并将结果渲染进页面
			
				// 因为一般处理程序ashx入口不多,所以在请求值中设定一个mark值,mark值表明我们要请求的函数名称。参数可以设定在请求值中,也可以在之前的aspx调用中,保存在Session会话中。
				function getServerReturn(){
					subjects = [];
					$.ajaxSettings.async = false; // 关闭异步,否则返回结果的渲染必须写进回调函数中。关闭异步,同步等待回调结束。
					$.post("/Controller/ServerReturn.ashx",{mark: "getReturn"}, function(res){
						// 此处为调用服务器后的,返回函数,参数res是返回的结果
						subjects = $.parseJSON(res); // 将JSON字符串解析为对象
						console.log(res);
					});
					
					return subjects; // 因为关闭异步,所以会等待回调后再返回
				}
				
				function jsRendering(){
					var subject = getServerReturn();
					var resHtml = $("#subjectTalbeJr").render(subjects);
					$("#tbSubject").append(resHtml);
				}	
			})
		</script>
	</body>
</html> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值