ajax的原型,隐藏帧-----ajax底层原型技术

今天学习了不用ajax,实现注册表单向后台判断用户名是否存在的隐藏帧技术,

也是ajax的底层原型技术。

首先,如下图所示,界面是由注册表单、小表单以及一个iframe组成。后台是一个

处理注册的Servlet以及判断用户名是否存在的servlet取名为valNameServlet。

6142b2e397fd7de87ee9ce346dd5e365.png

隐藏之后的页面;

e3a7d663a9da95146bb7a90958944f1f.png

技术细节:

1.小表单的type为hidden,并设置一个target属性将访问servlet的结果响应到iframe中

2.iframe使用的是name属性而不是id属性,iframe的作用相当于ajax的回调。

3.js即通过点通讯将表单提交后台,并返回结果:

//与后台进行点通讯的前端页面技术 function valName(obj){ //var name = document.getElementsByName("name")[0].value; //如果函数没有传this参数 //alert(name); var name = obj.value; //如果函数传了this参数 //要把name发给后台校验并接收校验结果 if(name!=null){ //把name填入小表单,提交小表单 document.getElementById("regName").value=name; fm2.submit(); } } var isNameError="1"; function returnBack(res){ isNameError=res; if(res=="1"){ document.getElementById("msg").innerHTML="该用户名已经被注册,请换一个!"; }else{ document.getElementById("msg").innerHTML="恭喜,该用户名可以使用!"; } }

4.如何将传到的iframe中的结果传回到父页面即注册表单:

1.在js中读取后台servlet中传过来的数据方法 :

var res='';%=request.getattribute("error")%>

2.直接调用父页中的一个函数:parent.returnBack(res); 这一行代码的作用就是

从iframe中将结果传参到父页面即index.jsp,然后index.jsp再通过传回来的结果

进行判断并显示。

以下是代码:

前端index页面:

隐藏帧技术---ajax的底层原型技术

//与后台进行点通讯的前端页面技术 function valName(obj){ //var name = document.getElementsByName("name")[0].value; //如果函数没有传this参数 //alert(name); var name = obj.value; //如果函数传了this参数 //要把name发给后台校验并接收校验结果 if(name!=null){ //把name填入小表单,提交小表单 document.getElementById("regName").value=name; fm2.submit(); } } var isNameError="1"; function returnBack(res){ isNameError=res; if(res=="1"){ document.getElementById("msg").innerHTML="该用户名已经被注册,请换一个!"; }else{ document.getElementById("msg").innerHTML="恭喜,该用户名可以使用!"; } } 下面这些函数的技术我们之前已经讲过,不属本次课的内容// function sub(){ if(isNameError=="0" && valQq() && valEmail() && valPwd() ){ fm1.submit(); } } function valQq(){ //前端正则校验----略 return true; } function valPwd(){ //前端正则校验----略 return true; } function valEmail(){ //前端正则校验----略 return true; }

隐藏帧技术---ajax的底层原型技术 Name:

Pwd:

QQ:

Email:

%@>

valnameServlet:

package cn.hncu.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class valNameServlet extends HttpServlet { /**

* */

private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response);

} public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8");

PrintWriter out = response.getWriter();

out.println(""-//W3C//DTD HTML 4.01 Transitional//EN\">");

out.println("");

out.println(" A Servlet");

out.println(" "); request.setCharacterEncoding("UTF-8"); String regName = request.getParameter("regName"); //按理这里应该调用dao层验证regName是否存在,这里模拟了...

/* 法1: 该方式只能向客户端输出简单的文本信息,无法执行js

response.setContentType("text/html;charset=utf-8");

if(regName!=null && regName.startsWith("hncu")){ response.getWriter().println("该用户名已经被注册,请换一个!");

}else{ response.getWriter().println("恭喜,该用户名可以使用!");

}

*/ /*法2: 转发到一个结果页面res.jsp, * 让该res.jsp页面在iframe中显示, * 同时在res.jsp页面中直接写一行打开页面就执行的js脚本。 */ if(regName!=null && regName.startsWith("hncu")){ request.setAttribute("error", "1");//已经存在,error }else{ request.setAttribute("error", "0"); //可以使用,ok } request.getRequestDispatcher("/jsps/res.jsp").forward(request, response); out.println(" ");

out.println("");

out.flush();

out.close();

}

}

res.jsp(iframe中的结果显示):

ajax后台返回后的结果页面

//alert("aaa..."); //给父页中的msg-label组件填写信息 //※知识点:如何在js中读取后台servlet中传过来的数据 ※// var res=''; /* 法1: 直接在子页中操纵父页中的文档元素---如果操作比较简单,这种方法还是可以的 if (res == 1) {

parent.document.getElementById("msg").innerHTML = "该用户名已经被注册,请换一个!";

} else {

parent.document.getElementById("msg").innerHTML = "恭喜,该用户名可以使用!";

}*/ //法2: 直接调用父页中的一个函数,让该函数操作---如果操作比较复杂,这种方法更好 parent.returnBack(res);

ajax后台返回后的结果页面

你回来了....

%@>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值