Ajax


Ajax简介

  Ajax技术,从用户发送请求到获取响应,当用户界面在整个过程中不会受到干扰,而且我们可以在必要的时候只刷新页面的一小部分,而不用刷新整个页面,即"无刷新"技术

  Ajax(Asynchronous JavaScript and Xml)并不是一种全新的技术,而是整合了JavaScript.XML.CSS等几种技术而成

  Ajax的执行流程是,在用户界面触发事件调用JavaScript,通过Ajax引擎---XMLHttpRequest对象异步发送请求到服务器,服务器返回XML.JSON或HTML等格式的数据,然后利用返回的数据使用DOM和CSS技术局部更新用户界面

  Ajax的关键元素包括以下内容:

  1.JavaScript语言:Ajax技术的主要开发语言

  2.XML/JSON/HTML等:用来封装请求或者相应的数据格式

  3.DOM(文档对象模型):通过DOM属性或方法修改页面元素,实现页面局部刷新

  4.CSS:改变样式,美化页面的效果,提升用户体验度

  5.Ajax引擎:即XMLHttpRequest对象,以异步方式在客户端与服务器之间传递数据


XMLHttpRequest

XMLHttpRequest常用方法

XMLHttpRequest常用属性


编写测试(提交方式为get) (index.jsp页面上有两个文本框,一个name为txtName,一个name为txtPwd,当在txtName输入用户名时(鼠标光标移除文本框时)来判断用户名是否被注册并提示错误信息)

步骤一.搭建环境,新建Web工程,新建一个Servlet

package cn.happy.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 CheckUserServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request,response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            //定义一个字符串uname,request.getParameter("uname")中的uname是从前端页面获取的
            String uname=request.getParameter("uname");
            //判断字符串uname的值是否为andmin
            if(uname.equals("admin"))
            {
                response.getWriter().write("OK");
            }else
            {
                response.getWriter().write("NO");
            }
    }
}

步骤2:在index.jsp页面中进行配编写

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>Ajax校验</title>
    <script type="text/javascript" src="jquery-1.8.3.min.js"></script>
    <script type="text/javascript">
       window.onload=function(){
        var dom=document.getElementById("txtName");
          dom.onblur=function(){
             myajax();
          };
    };
    function myajax(){
       //01.定制出 xhr对象
       var xhr;
       //02.能力检测
       if(window.XMLHttpRequest){
           //非IE浏览器
          xhr=new XMLHttpRequest();
       }else{
          //IE内核
          xhr=new ActiveXObject("Microsoft.XMLHttp");
       }
        var dom=document.getElementById("txtName");
        var myspan=document.getElementById("msg");
        var myval=dom.value;
       //03.构建请求地址
       //xhr.open("请求类型","请求地址","是否异步");
       xhr.open("get","<%=path%>/servlet/CheckUserServlet?uname="+myval,true);

       //04.设置回调函数     响应回来的数据
       xhr.onreadystatechange=function(){
         //什么
         if(xhr.readyState==4&&xhr.status==200){
            //获取响应数据
            var data=xhr.responseText;
            if(data=='OK'){

                 myspan.innerText="用户名已经被注册";
            }else{

                 myspan.innerText="用户名可以注册";
            }
         }
       };
       //05.用send真正的发送请求
       xhr.send(null);
       }
    </script>
  </head>
  <body>
    <h1>register</h1>
    用户名:<input name="uname" id="txtName"/><br/><span id="msg"></span>
    <br/>
  密      码:<input name="upwd" type="password" id="txtPwd"/>
  </body>
</html>

步骤三:在浏览器端测试效果

当在txtName输入不是admin的字符时,我们来看下效果

当在txtName输入是admin的字符时,我们来看下效果


编写测试(提交方式为post) (index.jsp页面上有两个文本框,一个name为txtName,一个name为txtPwd,当在txtName输入用户名时(鼠标光标移除文本框时)来判断用户名是否被注册并提示错误信息)

当提交方式为Post时,我们只需要在index.jsp的页面上修改JavaScript代码即可,其他步骤不变

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>Ajax校验</title>
    <script type="text/javascript" src="jquery-1.8.3.min.js"></script>
    <script type="text/javascript">
       window.onload=function(){
        var dom=document.getElementById("txtName");
          dom.onblur=function(){
             myajax();
          };

    };

    function myajax(){

       //01.定制出 xhr对象
       var xhr;
       //02.能力检测
       if(window.XMLHttpRequest){
           //非IE浏览器
          xhr=new XMLHttpRequest();
       }else{
          //IE内核
          xhr=new ActiveXObject("Microsoft.XMLHttp");
       }
        var dom=document.getElementById("txtName");
        var myspan=document.getElementById("msg");
        var myval=dom.value;
       //03.构建请求地址
       //xhr.open("请求类型","请求地址","是否异步");
       xhr.open("post","<%=path%>/servlet/CheckUserServlet",true);

       //04.设置回调函数     响应回来的数据
       xhr.onreadystatechange=function(){
         //什么
         if(xhr.readyState==4&&xhr.status==200){
            //获取响应数据
            var data=xhr.responseText;
            if(data=='OK'){
                 myspan.innerText="用户名已经被注册";
            }else{

                 myspan.innerText="用户名可以注册";
            }
         }
       };
       //05.用send真正的发送请求
       xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
       xhr.send("uname="+myval);

       }
    </script>
  </head>

  <body>
    <h1>register</h1>
    用户名:<input name="uname" id="txtName"/><br/><span id="msg"></span>
    <br/>
  密      码:<input name="upwd" type="password" id="txtPwd"/>
  </body>
</html>

标黄颜色背景的代码与上面提交方式为get请求的代码不同,我们需要注意当为Post请求时setRequestHeader()的方法是必须要写的

我们来看一下效果:

当在txtName输入不是admin的字符时,我们来看下效果

当在txtName输入是admin的字符时,我们来看下效果

注意Request Method的值已经变成Post


JSON

JSON:JavaScript对象表示法(JavaScript Object Notation)它是存储和交换文本信息的语法,类似于XML。JSON比XML更小,更快,更清晰

测试:(在Web项目中新建一个json.jsp页面,来测试JSON

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>json</title>
    <script type="text/javascript" src="jquery-1.8.3.min.js"></script>
    <script type="text/javascript">
      var data={"firstName":"Brett","lastName":"hehe"};
    $.each(data,function(i,dom){
        alert(dom);
    });
    </script>
  </head>

  <body>
    <h1>register</h1>
    用户名:<input name="uname" id="txtName"/><br/><span id="msg"></span>
    <br/>
  密      码:<input name="upwd" type="password" id="txtPwd"/>
  </body>
</html>

each()方法用来读取json

我们来看一下效果:(当访问页面时,会出现两个提示,一个为Brett一个为hehe)

当需要遍历json时应在json.jsp编写如下代码

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>json</title>
    <script type="text/javascript" src="jquery-1.8.3.min.js"></script>
    <script type="text/javascript">

      /*var data={"firstName":"Brett","lastName":"hehe"};
    $.each(data,function(i,dom){
    alert(dom);
    }); */

var data={
    "people":[
        {"firstName":"悟空","lastName":"大闹","email":"天宫"},
        {"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
        {"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
    ]
};
$.each(data.people,function(i,dom){
    alert(dom.firstName);
    });
    </script>
  </head>

  <body>
    <h1>register</h1>
    用户名:<input name="uname" id="txtName"/><br/><span id="msg"></span>
    <br/>
  密      码:<input name="upwd" type="password" id="txtPwd"/>
  </body>
</html>

我们来看下效果(页面上提示出三个提示框一个为悟空,一个为jason,一个为Elliotte)

Ajax与json的更多相关文章

  1. ASP.NET 5 - $.ajax post JSON.stringify(para) is null

    JavaScript 代码: var para = {}; para.id = $("#ad-text-id").val(); para.title = $("#ad-t ...

  2. qt qml ajax 获取 json 天气数据示例

    依赖ajax.js类库,以下代码很简单的实现了获取天气json数据并展示的任务 [TestAjax.qml] import QtQuick 2.0 import "ajax.js" ...

  3. ajax将json写到table中去

    查询条件: <table style="width: 100%;border-collapse: collapse;" > <tr> <th styl ...

  4. ajax获取json对象

    ajax获取json对象 ajax获取json数据,都是一个原理,设置response 的Content-Type:application/json,这样浏览器自动会解析为json对象 $result ...

  5. Ajax与json在前后端中的细节解惑

    ajax请求JSON Thinkphp中对是否为Ajax的判断,在TP3.2开发手册中有这么一段:“需要注意的是,如果使用的是ThinkAjax或者自己写的Ajax类库的话,需要在表单里面添加一个隐藏 ...

  6. Ajax与Json的一些总结

    Ajax与Json AJAX=异步javaScript 和XML AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新. 这意味着可以在不 ...

  7. ajax返回JSON时的处理方式

    JSON中对象通过“{}”来标识,一个“{}”代表一个对象,如{“AreaId”:”123”},对象的值是键值对的形式(key:value). json_encode() 该函数主要用来将数组和对象, ...

  8. JQuery处理json与ajax返回JSON实例

    一.JSON的一些基础知识. JSON中对象通过“{}”来标识,一个“{}”代表一个对象,如{“AreaId”:”123”},对象的值是键值对的形式(key:value). “[]”,标识数组,数组内 ...

  9. Jquery 模板插件 jquery.tmpl.js 的使用方法(1):基本语法,绑定,each循环,ajax获取json数据

    jquery.tmpl.js 是一个模板js  ,主要有2个方法 (1):$.template()方法,将一段script或者是Html编译为模板,例如 $.template('myTemplate' ...

  10. [Javascript,JSON] JQuery处理json与ajax返回JSON实例

    转自:http://www.php100.com/html/program/jquery/2013/0905/5912.html [导读] json数据是一种经型的实时数据交互的数据存储方法,使用到最 ...

随机推荐

  1. poj1789--最小生成树(prim)

    水题... 题目大意: 用一个7位的字符串代表一个编号,两个编号之间的distance代表这两个编号之间不同字母的个数.一个编号只能由另一个编号“衍生”出来,代价是这两个编号之间相应的distance ...

  2. java程序员保持天天快乐的6个习惯

    忍不住感叹,我第一次对Buffer(在社交媒体上发布最简单的方式)有所想法已经差不多是两年前的事了.并且,在我有想法的一年半前,我还在前面那家新创公司工作的时...... 忍不住感叹,我第一次对Buf ...

  3. ZHA profile与ZLL profile的一个例子

    ZHA Coordinator 如何控制ZLL Light/Philips Hue Light 缩写: ZHA: ZigBee Home Automation profile ZLL:  ZigBee ...

  4. 第 1 章 jQuery EasyUI 入门

    学习要点: 1.什么是 jQuery EasyUI 2.学习 jQuery EasyUI 的条件 3.jQuery EasyUI 的功能和优势 4.其他的 UI 插件 5.是否兼容低版本 IE 6.下 ...

  5. php中防止SQL注入的方法

    [一.在服务器端配置] 安全,PHP代码编写是一方面,PHP的配置更是非常关键. 我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最 ...

  6. C# Async/Await

    前言   前几天去一个公司面试,被问到 Async/Await,之前只知道有这么个东西,没有深入了解过就没有答上来.今天没啥事情,就查了下资料. 同步编程,异步编程概念     通常情况下,我们写的程 ...

  7. 浅入浅出dubbo

    1. Dubbo是什么? 只是一个框架 Hibernate是持久层框架,SpringMVC是MVC的框架,而Dubbo是分布式服务框架. 是框架而不是服务 所以不是像Tomcat或Memcached可 ...

  8. html5实现银联海购商品分类列表

    银联海购官网请点击 http://haigou.unionpay.com/ 1.实现效果预览展示如下: 2.源码如下 <!DOCTYPE html> <html> <he ...

  9. AMD and CMD are dead之KMDjs集成Blob一键下载全部build包

    更新 不zuo,[A/C]MD就不会死,所以kmdjs赢来来其伟大的版本0.0.6,该版本主要的更新有: 移除去了kmdjs.get(..).then的支持,只支持kmdjs.get(-,functi ...

  10. Sharepoint学习笔记—ECM系列—文档列表的Metedata Navigation与Key Filter功能的实现

    如果一个文档列表中存放了成百上千的文档,想要快速的找到你想要的还真不是件容易的事,Sharepoint提供了Metedata Navigation与Key Filter功能可以帮助我们快速的过滤和定位 ...