0

0

ajax是怎么出现的?ajax是如何开发的?(总结篇)

寻∝梦

寻∝梦

发布时间:2018-09-10 14:26:50

|

2115人浏览过

|

来源于php中文网

原创

本篇文章主要的介绍了关于ajax的背景定义,还有关于ajax的个人使用总结,现在就让我们一起来看看这篇文章吧

本文有如下几个内容:

  • 什么是AJAX

  • AJAX出现的背景

  • AJAX的原理

  • AJAX的定义

  • AJAX的开发步骤

  • 一个简单的demo

  • AJAX技术的优缺点

  什么是AJAX?

  通过查阅维基百科我们可以看到这样一段话:  AJAX即“Asynchronous JavaScript and XML”(异步的JavaScript与XML技术),指的是一套综合了多项技术的浏览器端网页开发技术。

  那么,现在我们现在就有一个大致的印象了,AJAX=JavaScript+XML。而js和xml我们应该都不陌生。
  AJAX出现的背景
  回顾我们的开发旅程,在原来使用Servlet+JSP+JavaBean开发的过程中,我们的Web应用允许用户在网页端填写并提交表单(Form),以向网页服务器发送请求(Request)。服务器接收请求并处理传来的表单,返回响应(Response),浏览器取得响应后,通过解析将页面展示在浏览器上,这样就完成了一次用户与服务器的交互。
  然而,这种模式存在一些问题。现在看这样一个例子:浏览器端展示了用户登陆界面,当用户输入用户名、密码及验证码后,数据被发送到了服务器,假定我们在Servlet中处理请求后发现用户名及密码不匹配,我们接下来会做什么?
  我们会重新将页面连同错误信息的响应返回给浏览器端,浏览器在解析响应后对信息进行展示,使用这样的开发流程,无论业务实现的多么完美都会有一些固有的问题:
  首先,浪费带宽。在前后两个页面中除了展示错误信息的部分外其它元素全都是相同的。
  其次,用户体验差。假设用户在表单中不小心输入了错误的用户名,在提交表单后就会出现等待一段时间后页面被刷新、并提示用户名错误的情况,这样用户又得重新输入一遍用户名及密码,体验极不友好。在用户的网速比较慢的情况下,用户体验还会更差。
  那么有没有什么方法可以解决这种问题呢?也就是,能不能在用户刚输入用户名时就可以得到反馈呢?
  AJAX的大致思路
  在js的XMLHttpRequest对象出现之前是没有办法的,但是在它出现之后,前辈们想到了一种比较好的解决方法,即:使用XMLHttpRequest对象作为Agent来将请求发送给服务器,并用它来接收服务器返回的数据,这样就可以不跳转页面完成数据的交互,而且只需要传输少量必要数据,因此对网速的要求也变低了。
  但是,还有两个问题没有解决:
  1.如何根据服务器端返回的数据动态更改页面,以达到与用户交互的作用?
  2.如何规定服务器发送回来的数据格式,使它更通用,并且传输量尽可能的少呢?
  对于1:前辈们选择了使用JavaScript,个人理解这样做的原因有两个,第一,JavaScript足够流行,几乎所有的主流浏览器都对JavaScript提供了支持;第二,JavaScript可以通过DOM编程的方式来动态的改变网页的内容。
  对于2:前辈们选择了XML,我想可能是因为它语法足够严格、语义明确而且更加通用吧。但是我认为传输的数据格式对使用AJAX并没有影响。例如,我们可以选择传输Json来使传输的数据更加少,甚至可以选择传输一段有意义的字符串,只要服务器端与浏览器端开发者对格式进行了约定即可。
  AJAX定义
  现在,我们就可以定义AJAX了:AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
  AJAX技术的开发步骤
  通过上面的介绍,我们知道了解决传统的资源浪费问题的思路,现在就来看一下,如何来实现吧!
  关于AJAX的实现,可以去查看W3School关于AJAX的介绍
  下面是我简单总结的AJAX实现步骤:
  1. 我们需要一个XMLHttpRequest对象。(我们都知道IE低版本浏览器的标准很很多都与主流标准不兼容。很不幸,对于XMLHttpRequest对象也是一样的….)
  因此,一个XMLHttpRequest对象的获取过程是这样的:

    var httpXml = null;    if(window.XMLHttpRequest){
        httpXml = new XMLHttpRequest();  //针对现代浏览器,IE7及以上版本
    }else if(window.ActiveXObject){
        httpXml = new ActiveXObject("Microsoft.XMLHTTP");  //针对IE5,IE6版本
    }

  2.我们需要为这个XMLHttpRequest对象注册它要进行的操作(通过回调),并根据返回的请求状态与HTTP状态码来查看消息的状态,并确定在何种情况下我们要进行何种操作。(想看更多就到PHP中文网AJAX开发手册栏目中学习)

魔法映像企业网站管理系统
魔法映像企业网站管理系统

技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作

下载

  这个过程是这样的:

    //为XMLHttpRequest对象的onreadystatechange属性注册
    httpXml.onreadystatechange=function(){
        //  在回调函数中根据请求状态与返回的HTTP状态码来选择相应的操作处理数据
        if(httpXml.readyState==4&&httpXml.status==200){
            alert(httpXml.responseText);
        }
    };

28.png

  3.我们需要进行请求发送的参数设置。
  这个过程是这样的:

    //函数原型:open(method,url,async,username,password)    //method            --->请求方式:GET,POST或HEAD    //url               --->请求的地址  GET提交方式可以在后面加上参数    //async             --->请求是否异步执行,true---异步,false---同步   默认为true
    //username,password --->可选,为url所需的授权提供认证资格。如果不为空,会覆盖掉url中指定的资格
    httpXml.open("GET","http://localhost:8080/aaa/MyServlet",true);

  4.要真正的发送请求啦!

    //  参数为请求参数,POST提交内容格式为--->"username=taffy&password=666",GET为----->空
    //  注意:若为POST请求方式,还需设置一个http请求头(应该位于open之后,send之前)
    // 即 setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");    标志form表单的enctype属性
        httpXml.send(null);

27.png  这样,一个简单的AJAX过程就完成了。
  一些没有介绍的小知识点:

    //XMLHttpRequest属性
    responseText   得到返回的文本信息
    responseXML    得到返回的XML信息    //XMLHttpRequest的方法
    getResponseHeader()   得到指定头部信息    getAllResponseHeaders() 将 HTTP响应头部作为未解析的字符串返回    //XMLHttpRequest的控制方法
    abort()    取消当前响应,关闭连接,将readyState置0

  下面是我做的一个简单的Demo:

register.html
Insert title here
        
MyServlet.java
import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/**
 * Servlet implementation class MyServlet
 */@WebServlet("/MyServlet")public class MyServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;    /**
     * @see HttpServlet#HttpServlet()
     */
      public MyServlet() {        super();
    }    @override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        String username = request.getParameter("user");        if (username!=null&&!username.equals("")) {            if (username.equals("admin")) {
                out.write("true");
            }else {
                out.write("false");
            }
        }else {
            out.write("false");
        }
        out.close();
    }    @override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

* 下面对AJAX的优缺点进行一下总结:*
  优点:
  能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。
  缺点:
  1.它可能破坏浏览器的后退功能。在动态更新页面的情况下,用户无法回到前一个页面状态,这是因为浏览器仅能记下历史记录中的静态页面(现代浏览器一般都可以解决这个问题);
  2.使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中。

本篇文章到这就结束了(想看更多就到PHP中文网AJAX使用手册栏目中学习),有问题的可以在下方留言提问。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

178

2026.01.28

包子漫画在线官方入口大全
包子漫画在线官方入口大全

本合集汇总了包子漫画2026最新官方在线观看入口,涵盖备用域名、正版无广告链接及多端适配地址,助你畅享12700+高清漫画资源。阅读专题下面的文章了解更多详细内容。

35

2026.01.28

ao3中文版官网地址大全
ao3中文版官网地址大全

AO3最新中文版官网入口合集,汇总2026年主站及国内优化镜像链接,支持简体中文界面、无广告阅读与多设备同步。阅读专题下面的文章了解更多详细内容。

79

2026.01.28

php怎么写接口教程
php怎么写接口教程

本合集涵盖PHP接口开发基础、RESTful API设计、数据交互与安全处理等实用教程,助你快速掌握PHP接口编写技巧。阅读专题下面的文章了解更多详细内容。

2

2026.01.28

php中文乱码如何解决
php中文乱码如何解决

本文整理了php中文乱码如何解决及解决方法,阅读节专题下面的文章了解更多详细内容。

4

2026.01.28

Java 消息队列与异步架构实战
Java 消息队列与异步架构实战

本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。

8

2026.01.28

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

24

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

122

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

72

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号