Ajax技术组成与核心原理分析

本文主要为大家分析了Ajax技术组成原理,供大家参考,具体内容如下

1、Ajax
特点:局部刷新、提高用户的体验度,数据从服务器商加载

2、AJax的技术组成
不是新技术,而是之前技术的整合
Ajax: Asynchronous Javascript And Xml;(异步的JavaScript和XML)
包括的技术:JavaScript、XML、CSS、XMLHttpRequest
异步:发送请求以后,不等结果,由回调函数处理。
JavaScript:向服务器发送请求,获得返回结果,更新页面
XML:用来封装数据

3、Ajax核心原理
XMLHttpRequst对象:通过该对象向服务器发送请求。
它是异步请求的技术,所有现代浏览器都支持(Chrome、IE5+)

1)创建XMLHttpReuest对象
非IE浏览器(Mozilla/Safari):var xhr=new XMLHttpRequest();
IE:xhr=new ActiveXObject("Msxml2.XMLHTTP");
低版本IE:xhr=new ActiveXObject("Microsfot.XMLHTTP");
2)XMLHttpRequest对象的属性与方法
a)方法:open("GET/POST",URL,true/false):用来向服务器建立连接
有三个参数:
参数1:提交方式,post或get
参数2:请求的URL
参数3:表示同步或异步请求,true:表示异步请求
false: 表示同步请求
send(data):发送请求
参数:提交的内容。
POST方式:data就是提交的参数,send(username=root&password=abc123);
GET方式:send(null)

b)属性:
onreadystatechange:设置状态改变时的回调函数,回调函数用来获取服务器数据。
onreadystatechange=function(){      

readyState:服务器状态响应
状态码:
0:未初始化
1:正在加载
2:加载完成
3:请求进行中
4:请求完成

responseText:服务器返回的数据(文本格式)
responseXML:服务器返回的数据(XML格式)

总结:
 使用XMLHttpRequest的步骤:
   1)创建XMLHttpRequest对象
   2)设置请求的方法及URL
    xhr.open("GET/POST","url",true/false),true表示异步请求,false表示同步请求
   3)设置状态改变时的回调函数
     xhr.onreadystatechange=function(){}
    0:未初始化
     1:正在加载
     2:加载完成
     3:请求进行中
     4:请求完成
   4)发送请求
     xhr.send(data),
    如果为post提交,则data为提交的数据,如果为get提交,则参数为null即可。

判断用户登录的HTML页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>
</head>
<body>
  用户名:<input type="text" name="username" id="username"><br>
  密码:<input type="password" name="password" id="password">
  <a href="javascript:chkUser();">登录</a>
  <div id="res"></div>
</body>

<script type="text/javascript">
  var xhr;
  /**
  * 创建XMLHttpRequest对象
  */
 function createXMLHttpRequest(){
  //1、创建XMLHttpRequest对象
    if(window.XMLHttpRequest){
      //非IE内核浏览器
     xhr=new XMLHttpRequest();
    }else{
      //IE浏览器
      try{
        xhr=new ActiveXObject("Msxml2.XMLHTTP");
      }catch(e){
       //IE低版本
        xhr=new ActiveXObject("Microsoft.XMLHTTP");
      }
    }
 }

  /**
  * 发送请求,用来检查用户名、密码是否正确
  */
  function chkUser(){

    //1、创建XMLHttpRequest
    createXMLHttpRequest();

    //2、获得用户名、密码
    var username=document.getElementById("username").value;
    var password=document.getElementById("password").value;

    //3、与服务器建立连接:open
    var url="login?username="+username+"&password="+password;
    //方式1:get提交
    //xhr.open("GET",url,true);

    //方式2:post提交
    var url2="login";
    xhr.open("POST",url2,true);

    //4、设置回调函数,获得服务器响应的数据
    xhr.onreadystatechange=function(){
      /*
      readyState状态码:
      0:未初始化
      1:正在加载
      2:加载完成
      3:请求进行中
      4:请求完成
      */
      if(xhr.readyState==4){
        //status,200表示响应正常
        if(xhr.status==200){
         //alert("从服务器返回的值为:"+xhr.responseText);
         var res=xhr.responseText;
         if(res=='0'){
           document.getElementById("res").innerHTML="登录成功";
         }else{
           document.getElementById("res").innerHTML="<font color='red'>登录失败</font>";
         }

        }else{
          alert("出现在了异常:"+xhr.response.Text);
        }

      }
    }
    //5、发送请求
    //方式1:get方式
    //xhr.send(null);

    //方式2:post方式:
    //Post提交需要设置http请求头
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send("username="+username+"&password="+password);

  }

</script>

</html>

服务端代码:

package com.newer.login.web;

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;

import com.newer.login.bean.User;
import com.newer.login.service.UserService;

/**
 * Servlet implementation class LoginServlet
 */
public class LoginServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;

  UserService userService = new UserService();

  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
   *   response)
   */
  protected void doGet(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
    doPost(request,response);

  }

  /**
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
   *   response)
   */
  protected void doPost(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
    // 1、获得页面参数
    String username = request.getParameter("username");
    String password = request.getParameter("password");

    System.out.println("获得请求的参数username:"+username);
    System.out.println("获得请求的参数password:"+password);
    // 2、封装User对象
    User user = new User();
    user.setUsername(username);
    user.setPassword(password);

    // 3、调用服务类,完成用户名、密码的校验
    User u = userService.login(user);

    /*
     * 传统方式 if(u!=null){ //表示登录成功 request.setAttribute("user", user);
     * //跳转至首页... }else{ //登录失败,跳转登录页面
     *
     * }
     */
    // ajax响应

    PrintWriter out = response.getWriter();

    if (u != null) {
      //0成功,1失败
      out.print(0);
    }else{
      out.print(1);
    }
    out.close();

  }

}
(0)

相关推荐

  • php+ajax实现无刷新动态加载数据技术

    我们浏览有些网页的时候,当拉动浏览器的滚动条时到页底时,页面会继续自动加载更多内容供用户浏览.这种技术我暂且称它为滚屏加载技术.我们发现很多网站用到这种技术,必应图片搜索.新浪微博.QQ空间等将该技术应用得淋漓尽致. 滚屏加载技术,就是使用Javascript监视滚动条的位置,每次当滚动条到达浏览器窗口底部时,触发一个Ajax请求后台PHP程序,返回相应的数据,并将返回的数据追加到页面底部,从而实现了动态加载,其实就是一个典型的Ajax应用.本文将使用jQuery,结合PHP,mysql以及JS

  • Javascript异步表单提交,图片上传,兼容异步模拟ajax技术

    前言: 咋一看标题还挺长的呢,还有这么多功能,其实简化一点就是一个功能,异步表单提交,只是在异步表单提交这个大功能下,可以实现图片上传,模拟ajax技术(其实很早以前就是通过这个方式来实现多浏览器的兼容ajax,这里只是怀怀旧,作为一个技术来玩玩),下面的内容需要有一定的js基础,要不然理解起来会比较困难. 注意事项: 这是我bBank里面的一个方法,现在我把他提取出来成一个通用方法来讲解. bBank 框架介绍:http://www.cnblogs.com/bruceli/archive/20

  • jQuery之ajax技术的详细介绍

    1:Ajax技术包含以下几点:基于Web标准(XHTML + CSS)的展示使用DOM进行动态显示和交互使用XMLHttpRequest进行数据交换和相关操作使用javascript将所有内容绑定在一起Ajax的核心是JavaScript的XMLHttpRequest对象,它是一种支持异步请求的技术.简而言之,使用JS可以控制XMLHttpRequest对象向服务器提出请求并处理响应,而不影响用户对页面的正常访问.对于XMLHttpRequest对象,不同的浏览器提供了不同的支持,IE是将其作为

  • Ajax技术(WEB无刷新提交数据)-

    Ajax内部交流文档一.使用Ajax的主要原因 1.通过适当的Ajax应用达到更好的用户体验: 2.把以前的一些服务器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约ISP的空间及带宽租用成本的目的. 二.引用 Ajax这个概念的最早提出者Jesse James Garrett认为: Ajax是Asynchronous JavaScript and XML的缩写. Ajax并不是一门新的语言或技术,它实际上是几项技术按一定的方式组合在一在同共的协作中发

  • Tab页界面,用jQuery及Ajax技术实现

    到了B/S开发时代,网页前端布局也把Tab页的布局形式吸收了过来.特别是和Ajax技术结合起来,可以更充分发挥Tab页的良好表现力和数据缓存的优势,是一种良好的网页布局形式. 网上的Tab页代码很多,实现也大同小异 ,但代码都显得凌乱,若要真的用的话,必须费劲的吃透它,才能进行二次定制开发,为我所用.实际上实现这个Tab页界面非常简单,仅仅是通过Ajax技术偷偷的获取信息,然后在一块区域轮流显示而已(通过显示和隐藏层,或复用一个层,轮流向里边填充Html数据). 自己的开发的代码自己最清楚,用起

  • 使用ajax技术无刷新动态调用新浪股票实时数据

    新浪的财金频道一直感觉做得很好.但由于最近网速慢的缘故,查看股票信息时网页老是打不开.这几天一直在研究ajax,于是用jquery自己做了一个自动读取新浪股票实时数据的页面. <html> <head> <title>ajax test</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <scri

  • 不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术

    网上流传的什么<<AJAX vs ASP传统无刷新>>中的ASP无刷新,加个IFRAME,弄个JS根本不能称之为无刷新..... 一下代码未区分大小写,请自行修改! 全静态无刷新思路: <HTML> <SCRIPT SRC=""></SCRIPT>//当前页面全局的 无数新调用 <SCRIPT> //一系列JS调用 FUNCTION XX(FUN_NAME,PARAMETER_NAME,PARAMETER_VALU

  • ajax 技术和原理分析

    ajax所包含的技术 大家都知道ajax并非一种新的技术,而是几种原有技术的结合体.它由下列技术组合而成. 1.使用CSS和XHTML来表示. 2. 使用DOM模型来交互和动态显示. 3.使用XMLHttpRequest来和服务器进行异步通信. 4.使用javascript来绑定和调用. 在上面几中技术中,除了XmlHttpRequest对象以外,其它所有的技术都是基于web标准并且已经得到了广泛使用的,XMLHttpRequest虽然目前还没有被W3C所采纳,但是它已经是一个事实的标准,因为目

  • 利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法

    准备工作: ① 首先要会使用ThinkPHP这个框架 ② 最好有些ajax的基础(可以去看下小飞的另外一篇博文:Ajax实时验证"用户名/邮箱等"是否已经存在) ③ 4个js文档(点此免积分下载) 先贴上源代码: 复制代码 代码如下: <script type="text/javascript" src="__PUBLIC__/js/base.js"></script> <script type="text

  • 落伍首发 php+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码

    绝对原创   测试地址: http://www.mlmm.cn/mypage/?name=ceshi 测试页代码: 复制代码 代码如下: <html>  <head>  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  <title>php+ajax动态生成下拉菜单</title>  <script lang

随机推荐