ajax是什么?

来源:常见问题 2014-03-05

     Ajax 是使用客户端脚本与 Web 服务器交换数据的 Web 应用开发方法。Web 页面不用打断交互流程进行重新加裁,就可以动态地更新。使用 Ajax,用户可 以创建接近本地桌面应用的直接、高可用、更丰富、更动态的 Web 用户界面。 软件开发网 异步 JavaScript 和 XML(AJAX)不是什么新技术,而是使用几种现有技术 ——包括级联样式表(CSS)、JavaScript、XHTML、XML 和可扩展样式语言转换 (XSLT),开发外观及操作类似桌面软件的 Web 应用软件。 执行原理] [AJAX 执行原理] 一个 Ajax 交互从一个称为 XMLHttpRequest 的 JavaScript 对象开始。如同 名字所暗示的, 它允许一个客户端脚本来执行 HTTP 请求, 并且将会解析一个 XML 格式的服务器响应。 Ajax 处理过程中的第一步是创建一个 XMLHttpRequest 实例。 使用 HTTP 方法(GET 或 POST) 来处理请求, 并将目标 URL 设置到 XMLHttpRequest 对象上。 http://www.mscto.com 当你发送 HTTP 请求,你不希望浏览器挂起并等待服务器的响应,取而代之 的是,你希望通过页面继续响应用户的界面交互,并在服务器响应真正到达 后 处理它们。要完成它,你可以向 XMLHttpRequest 注册一个回调函数,并异步地 派发 XMLHttpRequest 请求。控制权马上就被返回到浏 览器,当服务器响应到达 时,回调函数将会被调用。 [AJAX 实际应用] [AJAX 实际应用] 1. 初始化 Ajax Ajax 实际上就是调用了 XMLHttpRequest 对象,那么首先我们的就必须调用 这个对象,我们构建一个初始化 Ajax 的函数: /** * 初始化一个 xmlhttp 对象 */

function InitAjax() { var ajax=false;

     try { ajax = new ActiveXObject("Msxml2.XMLHTTP"); }

     catch (e) { try { ajax = new ActiveXObject("Microsoft.XMLHTTP"); }

     catch (E) {
    ajax = false; } }

     if (!ajax && typeof XMLHttpRequest!='undefined')

     { ajax = new XMLHttpRequest(); }

     return ajax;

    }

    你 也许会说,这个代码因为要调用 XMLHTTP 组件,是不是只有 IE 浏览器能 使,不是的经我试验,Firefox 也是能使用的。 那么我们在执行任何 Ajax 操作之前,都必须先调用我们的 InitAjax()函数 来实例化一个 Ajax 对象。 2. 使用 Get 方式 现在我们第一步来执行一个 Get 请求,加入我们需要获取 /show.php?id=1 的数据,那么我们应该怎么做呢? 假设有一个链接:<a href="/show.php?id=1">新闻 1</a>,我点该链 接的时候,不想任何刷新就能够看到链接的内容,那么我们该怎么做呢? //将链接改为: <a href="http://cms.ddvip.com/index.php#" onClick="getNews(1)">新闻 1</a> //并且设置一个接收新闻的层,并且设置为不显示: <div id="show_news"></div> 同时构造相应的 JavaScript 函数:

     function getNews(newsID) {

    //如果没有把参数 newsID 传进来

    if (typeof(newsID) == 'undefined') {

    return false;

    }

    //需要进行 Ajax 的 URL 地址

    var url = "/show.php?id="+ newsID;

     //获取新闻显示层的位置

    var show = document.getElementById("show_news");

    //实例化 Ajax 对象

    var ajax = InitAjax();

    //使用 Get 方式进行请求
    ajax.open("GET", url, true);

    //获取执行状态

    ajax.onreadystatechange = function() {

    //如果执行是状态正常,那么就把返回的内容赋值给上面指定的层

    if (ajax.readyState == 4 && ajax.status == 200) {

        show.innerHTML = ajax.responseText;

     }

}

//发送空

ajax.send(null);

} 那么当,当用户点击“新闻 1”这个链接的时候,在下面对应的层将显示获 取的内容, 而且页面没有任何刷新。 当然, 我们上面省略了 show.php 这个文件, 我们只是假设 show.php 文件存在,并且能够正常工作的从数据库中把 id 为 1 的新闻提取出来。 这种方式适应于页面中任何元素,包括表单等等,其实在应用中,对表单的 操作是比较多的,针对表单,更多使用的是 POST 方式,这个下面将讲述。 3. 使用 POST 方式 其实 POST 方式跟 Get 方式是比较类似的, 只是在执行 Ajax 的时候稍有不同, 我们简单讲述一下。 假设有一个用户输入资料的表单, 我们在无刷新的情况下把用户资料保存到 数据库中,同时给用户一个成功的提示。 软件开发网 //构建一个表单,表单中不需要 action、method 之类的属性,全部由 ajax 来搞定了。 <form name="user_info"> 姓名:<input type="text" name="user_name" /><br /> 年龄:<input type="text" name="user_age" /><br /> 性别:<input type="text" name="user_sex" /><br /> <input type="button" value="提交表单" onClick="saveUserInfo()"> </form> //构建一个接受返回信息的层: <div id="msg"></div> 我们看到上面的 form 表单里没有需要提交目标等信息,并且提交按钮的类 型也只是 button,那么所有操作都是靠 onClick 事件中的 saveUserInfo()函数 来执行了。我们描述一下这个函数:
    软件开发网 function saveUserInfo() { //获取接受返回信息层 var msg = document.getElementById("msg"); //获取表单对象和用户信息值 var f = document.user_info; var userName = f.user_name.value; var userAge = f.user_age.value; var userSex = f.user_sex.value; //接收表单的 URL 地址 var url = "/save_info.php"; //需要 POST 的值,把每个变量都通过&来联接 var postStr = "user_name="+ userName +"&user_age="+ userAge +"&user_sex="+ userSex; //实例化 Ajax var ajax = InitAjax(); //通过 Post 方式打开连接 ajax.open("POST", url, true); //定义传输的文件 HTTP 头信息 ajax.setRequestHeader("Content-Type","application/x-www-form-urlencod ed"); //发送 POST 数据 ajax.send(postStr); //获取执行状态 ajax.onreadystatechange = function() { //如果执行状态成功,那么就把返回信息写到指定的层里 if (ajax.readyState == 4 && ajax.status == 200) {
    msg.innerHTML = ajax.responseText; } } } 大致使用 POST 方式的过程就是这样,当然,实际开发情况可能会更复杂, 这就需要开发者去慢慢琢磨。 4. 异步回调(伪 Ajax 方式) 一般情况下,使用 Get、Post 方式的 Ajax 我们都能够解决目前问题,只是 应用复杂程度,当然,在开发中我们也许会碰到无法使用 Ajax 的时候,但是我 们又需要模拟 Ajax 的效果,那么就可以使用伪 Ajax 的方式来实现我们的需求。
    伪 Ajax 大致原理就是说我们还是普通的表单提交,或者别的什么的,但是 我们却是把提交的值目标是一个浮动框架,这样页面就不刷新了,但是呢, 我 们又需要看到我们的执行结果,当然可以使用 JavaScript 来模拟提示信息,但 是,这不是真实的,所以我们就需要我们的执行结果来异步回调,告诉我 们执 行结果是怎么样的。 假设我们的需求是需要上传一张图片,并且,需要知道图片上传后的状态, 比如,是否上传成功、文件格式是否正确、文件大小是否正确等等。那么我们就 需要我们的目标窗口把执行结果返回来给我们的窗口, 这样就能够顺利的模拟一 次 Ajax 调用的过程。 以下代码稍微多一点, 并且涉及 Smarty 模板技术,如果不太了解,请阅读 相关技术资料。 上传文件:upload.html //上传表单,指定 target 属性为浮动框架 iframe1 <form action="/upload.php" method="post" enctype="multipart/form-data" name="upload_img" target="iframe1"> 选择要上传的图片:<input type="file" name="image"><br /> <input type="submit" value="上传图片"> </form> //显示提示信息的层 <div id="message" style="display:none"></div> //用来做目标窗口的浮动框架 <iframe name="iframe1" width="0" height="0" scrolling="no"></iframe > http://www.mscto.com 处理上传的 PHP 文件:upload.php <?php /* 定义常量 */ //定义允许上传的 MIME 格式 define("UPLOAD_IMAGE_MIME", "image/pjpeg,image/jpg,image/jpeg,image/gif,image/x-png,image/png"); //图片允许大小,字节 define("UPLOAD_IMAGE_SIZE", 102400); //图片大小用 KB 为单位来表示 define("UPLOAD_IMAGE_SIZE_KB", 100); //图片上传的路径 define("UPLOAD_IMAGE_PATH", "./upload/"); //获取允许的图像格式 $mime = explode(",", USER_FACE_MIME); $is_vaild = 0;
    //遍历所有允许格式 foreach ($mime as $type) { if ($_FILES['image']['type'] == $type) { $is_vaild = 1; } } //如果格式正确,并且没有超过大小就上传上去 if ($is_vaild && $_FILES['image']['size']<=USER_FACE_SIZE && $_FILES['image']['size']>0) { if (move_uploaded_file($_FILES['image']['tmp_name'], USER_IMAGE_PATH . $_FILES['image']['name'])) { $upload_msg ="上传图片成功!"; } else { $upload_msg = "上传图片文件失败"; } } else { $upload_msg = "上传图片失败, 可能是文件超过". USER_FACE_SIZE_KB ."KB、 或者图片文件为空、或文件格式不正确"; } //解析模板文件 $smarty->assign("upload_msg", $upload_msg); $smarty->display("upload.tpl"); ?> 模板文件:upload.tpl {if $upload_msg != ""} callbackMessage("{$upload_msg}"); {/if} //回调的 JavaScript 函数,用来在父窗口显示信息 function callbackMessage(msg) { //把父窗口显示消息的层打开 parent.document.getElementById("message").style.display = "block"; //把本窗口获取的消息写上去 parent.document.getElementById("message").innerHTML = msg; //并且设置为 3 秒后自动关闭父窗口的消息显示
    setTimeout("parent.document.getElementById('message').style.display = 'none'", 3000);
    } 使用异步回调的方式过程有点复杂,但是基本实现了 Ajax、以及信息提示 的功能, 如果接受模板的信息提示比较多, 那么还可以通过设置层的方式来处理, 这个随机应变吧。本文由dchua123贡献
    ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
    AJAX:理论篇
    AJAX的基本概念 的基本概念
    AJAX介绍 介绍 Ajax(Asynchronous JavaScript and XML)
    实现了浏览器异步读取服务器上XML内容的技术, Ajax 是异步 JavaScript 和 XML 的组合. Ajax 允许 Web 开发人员创建交互的 Web 页面,同时避免必须等候页面载入这一瓶颈. 通过 Ajax 创建的应用程序,只需点击按钮,就可以用全新的内容替换 Web 页面某一区域的内容. 它的精彩之处在于不必等候页面装入,只有这一个区域的内容需要载入. 以 Google Maps 为例:可以点击和四处移动地图,却不必等候页面载入. 特点: 特点: 和服务器端语言无关.任何服务器语言,均可使用AJAX. 基于Javascript和Xml. 更加人性化的客户体验. 应用: 应用: 如:用户名重复检查,验证码重载.
    AJAX原理 原理
    Ajax的核心是JavaScript对象 XmlHttpRequest. 该对象在Internet Explorer 5中首次引 入,它是一种支持异步请求的技术. 简而言之,XmlHttpRequest使您可 以使用JavaScript向服务器提出请求 并处理响应,而不阻塞用户.
    利用ajax,我们可以针对一次请求只 刷新局部的页面,这样可以大大提 高web程序对用户的响应速度,增强 交互性.下图是ajax的一个简单的原 理图.
    执行原理: 执行原理: 通过XmlHttpRequest来发送信息, 接收信息,从而实现了异步通信.
    XmlHttpRequest
    微软在其Internet Explorer(IE) 5中作为一个ActiveX对象形式引入了XMLHttpRequest对象.其他的作为一个本地 JavaScript对象来实现的.微软已经在其IE 7中把XMLHttpRequest实现为一个窗口对象属性.幸运的是,尽管其 实现(因而也影响到调用方式)细节不同,但是,所有的浏览器实现都具有类似的功能,并且实质上是相同方法. 目前,W3C组织正在努力进行XMLHttpRequest对象的标准化,并且已经发行了有关该W3C规范的一个草案.
    属性: 属性:
    readyState:通信的状态 onreadystatechange:当readstate改变时,会激发此事件. responseText:服务器返回的文档,以text/html格式. responseXML:服务器返回的文档,以text/xml格式. status:描述了HTTP状态代码,而且其类型为short.
    方法: 方法:
    open() 初始化一个XMLHttpRequest对象 send() 发送数据 setRequestHeader() 设置请求的头部信息 getResponseHeader() 方法用于检索响应的头部值
    readyState属性 属性
    readyState属性 属性 当XMLHttpRequest对象把一个HTTP请求发送到服务器时将经历若干种状态:一直等待直到请求 被处理;然后,它才接收一个响应.这样以来,脚本才正确响应各种状态-XMLHttpRequest对象 暴露一个描述对象的当前状态的readyState属性, ReadyState取值 取值 说明
    0
    描述一种"未初始化"状态;此时,已经创建一个 XMLHttpRequest对象,但是还没有初始化. "连接"状态;此时,代码已经调用了XMLHttpRequest open()方 法并且XMLHttpRequest已经准备好把一个请求发送到服务器. "发送"状态;此时,已经通过send()方法把一个请求发送到服 务器端,但是还没有收到一个响应. 正在接收"状态;此时,已经接收到HTTP响应头部信息,但是 消息体部分还没有完全接收结束. 描述一种"已加载"状态;此时,响应已经被完全接收.
    1
    2
    3
    4
    onreadystatechange属性 属性
    onreadystatechange属性 属性
    当readyState状态改变时,会激发此属性所指定的Javascript方法.
    如: ajax = new new XMLHttpRequest(): ajax. Onreadystatechange=myshow; Function myshow() { alert("方法被激活,当前状态"+ajax.readyState); }
    一般用于,当服务器处理完请求之后,要显示回传信息,用它来指定相应的方法来显示. responseText表示服务器返回的信息,以text/html格式. responseXML表示服务器返回的信息,以text/xml格式
    State属性 属性
    state属性 属性
    描述了HTTP状态代码,而且其类型为short,这个页面指处理请求的服务器端页面. 如:mailsave.php
    states取值 取值
    100
    说明
    Continue Switching protocols 数据交换 OK,完成状态 未找到页面 内部程序错误.
    101
    200
    404 500 其它略
    open()方法 方法
    open(method,pageurl,boolean async,[username],[password]) , ,
    用于初始化一个XMLHttpRequest对象. 其中, method参数是必须提供的-用于指定你想用来发送请求的HTTP方法(GET,POST,PUT, DELETE或HEAD).为了把数据发送到服务器,应该使用POST方法;为了从服务器端检索数据, 应该使用GET方法. pageurl参数用于指定XMLHttpRequest对象把请求发送到的服务器相应的URL. async参数指定是否请求是异步的-缺省值为true.为了发送一个同步请求,需要把这个参数设置 为false. 对于要求认证的服务器,你可以提供可选的用户名和口令参数,一般省略.
    在调用open()方法后,XMLHttpRequest对象把它的readyState属性设置为1(打开)并且把 responseText,responseXML,status和statusText属性复位到它们的初始值.另外,它还复位请求 头部.注意,如果你调用open()方法并且此时readyState为4,则XMLHttpRequest对象将复位这些 值.
    send()方法 方法
    send(字符串 字符串) 字符串
    在通过调用open() 后,你需要把该请求发送到服务器.当readyState值为1时,你才可以调用send() 方法;否则的话,XMLHttpRequest对象将引发一个异常.该请求被使用提供给open()方法的参 数发送到服务器.当async参数为true时,send()方法立即返回,从而允许其它客户端脚本处理继 续.在调用send()方法后,XMLHttpRequest对象把readyState的值设置为2(发送).当服务器响应 时,在接收消息体之前,如果存在任何消息体的话,XMLHttpRequest对象将把readyState设置为 3(正在接收中).当请求完成加载时,它把readyState设置为4(已加载).对于一个HEAD类型的请 求,它将在把readyState值设置为3后再立即把它设置为4. 对于GET方法: 方法: 对于 方法 一般不需发送数据,所以: send(null); 对于POST方法: 方法: 对于 方法 send("name=你好&age=20&page=5");
    其它方法
    setRequestHeader()方法 方法
    该setRequestHeader(DOMString header,DOMString value)方法用来设置请求的头部信息.当 readyState值为1时,你可以在调用open()方法后调用这个方法;否则,你将得到一个异常.
    getResponseHeader()方法 方法
    getResponseHeader(DOMString header,value)方法用于检索响应的头部值.仅当readyState值 是3或4(换句话说,在响应头部可用以后)时,才可以调用这个方法;否则,该方法返回一个空字 符串.
    getAllResponseHeaders()方法 方法
    该getAllResponseHeaders()方法以一个字符串形式返回所有的响应头部(每一个头部占单独 的一行).如果readyState的值不是3或4,则该方法返回null.
    AJAX:实战篇
    AJAX 实战与应用
    Jwork框架的 框架的ajax 框架的
    我们知道,web编程,最主要的就是实现客户端(IE)和服务器(Apache)的接收和发送,这是 做web开发的基础.其它的所有应用都是建立在这个基础之上的. 而AJAX,最主要的"亮点"就是异步通信,即实现了页面的不刷新.通过Javascrip实现了局部 更新.所以,AJAX与服务器端的交流方式,也主要是GET和POST.
    Jwork框架,是新东方一搏PHP01版全体师生经验的结晶,它为PHP的开发提供了"中国式"框 架, 易用性框架.
    Jwork框架的 框架的Ajax,完全采用 实现, 等所有web开 框架的 ,完全采用javascript实现,从而可以运用到 实现 从而可以运用到php,jsp,asp,.net等所有 , , , 等所有 开 发语言当中. 发语言当中.
    Jwork Ajax的特点: 的特点: 的特点 1,支持GET和POST提交数据方式. 2,支持主流浏览器. 3,支持控件和DIV所有html元素的数据回显. 4,使用简单,一句话即可实现AJAX.
    jget方法 方法
    jget(url,output) 首先,你要注意,jget方法,是一个javascript的function(方法),它不是php的方法. Jget相当于就是表单的get方法,只不过这里是异步的实现.
    Url:表示你要提交请求的网址.网址中可带一个或多个参数. Output:表示服务器回调的值显示的位置.一般为input或div标签的id名.
    应用演示: 应用演示: 用户名是否重复和验证实现.
    jpost方法 方法
    jpost(url,input,output) jpost有三处参数: 有三处参数: 有三处参数 Url:表示你要提交请求的网址.网址中可带一个或多个参数. Input:表示通过表单POST方式提交的数据.形式为:name=ccopen&id=20 Output:表示服务器回调的值显示的位置.一般为input或div标签的id名.