对于前端工程师来说,ajax是非常重要的一门技术。由他的全称就可以看出来,他是用来干什么的。即Asynchronous Javascript And XML 异步的JavaScript和XML。是指一种创建交互式网页应用的网页开发技术。
其实再使用的时候并不是很难,只要掌握了他的几个方法使用,就可以直接用,做出有异步交互效果的页面。
下面我就来说说怎么使用:
首先我们要创建一个XMLHttpRequest这个对象,代码就是var request = new XMLHttpRequest(); 这样就有了这个对象,然后就可以使用这个对象的方法,在使用之前我们需要了解http请求是什么东西,他是一个协议,简单来说就是网络请求需要这个协议进行控制,我们要根据http请求的状态来判断我们下一步该做什么工作。http他有几个状态码是我们必须先要了解的。他的数字可能去5个不同的值:
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受。这个也是我们最希望看到的。
3xx:重定向响应类,为了完成指定的动作,必须接收进一步的处理。
4xx:客户端错误,客户请求包含语法错误或者是不能正确的执行。
5xx:服务端错误,服务器不能正确执行一个正确的请求。
这些状态码是作为我们必须要知道的。必须要四级下来的。
我们先了解完这些知识后,接着我们刚刚创建的xhr对象。
我把XMLHttpRequest对象简称为xhr。
创建出这个request对象之后他有几个方法。首先当然是先要打开他使用他了。那这个方法就是open(post/get,URL,Asynchronous)这个方法有三个参数,第一个是请求的方式,要该怎么请求。有post和get请求这两个请求的方式是有区别的;有以下几点:
1、get是从服务器上获取数据,post是向服务器传送数据。
2、get是把参数数据队列加到提交表单的action属性所指的URL当中,值和表单内的字段一一对应。在URL中可以看到,post是通过http post机制,将表单内各个字段与其内容放置在html header内一起传送到action属性所指的URL地址,用户看不到这个过程,简单来说就是地址栏的get数据是可以看到的,post是看不到的。3、get传送的数据量较小,不能大于2kb。post传送的数据量较大,一般被默认为不受限制。但理论上IIs4中最大量为80kb,IIS5中为100kb,
这里的IIS就是网络信息服务的意思Internet information Service。
4、get安全性比较低,post安全性较高。但是执行效率却比post方法好。
使用的时候有下面两个建议:
1、get方式的安全性较post方式要差些,包含机密信息的话,建议用post数据提交方式。
2、在做数据查询时,建议用get方式;而在做数据添加、修改或删除时、建议用post方式。
接着request的方法open()完了之后就要发送数据了。所以就是send()方法;
request.send();
下面是一个例子:
request.open("POST","create.PHP,"true);
request.setRequestHeader("Content-type","application/x-www-from-urlencoded");
request.send("name=王二狗&sex=男");

这里面的第二行代码是设置http的头信息告诉服务器我们发送的是一个表单。
发送完之后,我们就等着服务器的回复信息了。我们用request.onreadystate和request.status这里的状态就是我前面说的http状态,准备状态
有知道了这两个我们就有了下面的代码request.onreadystatechange = function(){
if(request.readyState === 4 && request.status === 200){
//然后就可以接收收到的数据了request.responseText
var data = JSON.parse(request.responseText);
if(data.success){
document.getElementById("serchReasult").innerHTML = data.msg;
}else{
document.getElementById("searchResult").innerHTML = '出现错误:'+data.msg;
}
}else{
alert("发生错误:"+request.status);
}
}

里面验证都成功过之后就可以接收数据了,可以用request.responseText进行接收,也可以使用其他的接收,具体可以参考文档。接收到之后若是json格式的数据我们用JSON.parse(data)这个方法转换一下,就得到我们所需的数据了,我做的是若数据成功就把这个数据显示到页面上,没有则显示错误。
相信大家都能看懂,我把一个完整的服务端和前端的代码都贴出来,大家都看一下,做个参考
这是客户端代码:

<!DOCTYPE HTML>
<html>
<head>
<Meta http-equiv="Content-Type" content="textml; charset=utf-8">
<title>Demo</title>
<style> body,input,select,button,h1 { font-size: 28px; line-height:1.7; } </style>    
</head>

<body>

<h1>员工查询</h1>

<label>请输入员工编号:</label>
<input type="text" id="keyword" />
<button id="search">查询<tton>
<p id="searchResult"></p>

<h1>员工新建</h1>
<label>请输入员工姓名:</label>
<input type="text" id="staffName" /><br>
<label>请输入员工编号:</label>
<input type="text" id="staffNumber" /><br>
<label>请选择员工性别:</label>
<select id="staffSex">
<option></option>
<option></option>
<lect><br>
<label>请输入员工职位:</label>
<input type="text" id="staffJob" /><br>
<button id="save">保存<tton>
<p id="createResult"></p>

<script> document.getElementById("search").onclick = function() { var request = new XMLHttpRequest(); request.open("GET","server.PHP?number=" + document.getElementById("keyword").value); request.send(); request.onreadystatechange = function() { if (request.readyState===4) { if (request.status===200) { document.getElementById("searchResult").innerHTML = request.responseText; } else { alert("发生错误:" + request.status); } } } } document.getElementById("save").onclick = function() { var request = new XMLHttpRequest(); request.open("POST","server.PHP"); var data = "name=" + document.getElementById("staffName").value + "&number=" + document.getElementById("staffNumber").value + "&sex=" + document.getElementById("staffSex").value + "&job=" + document.getElementById("staffJob").value; request.setRequestHeader("Content-type","application/x-www-form-urlencoded"); request.send(data); request.onreadystatechange = function() { if (request.readyState===4) { if (request.status===200) { document.getElementById("createResult").innerHTML = request.responseText; } else { alert("发生错误:" + request.status); } } } } </script>
</body>
<html>
这是服务端代码用PHP写的。
<?PHP //设置页面内容是html编码格式是utf-8 header("Content-Type: text/plain;charset=utf-8"); //header("Content-Type: application/json;charset=utf-8");  //header("Content-Type: text/xml;charset=utf-8");  //header("Content-Type: textml;charset=utf-8");  //header("Content-Type: application/javascript;charset=utf-8");  //定义一个多维数组,包含员工的信息,每条员工信息为一个数组 $staff = array ( array("name" => "洪七","number" => "101","sex" => "男","job" => "总经理"),array("name" => "郭靖","number" => "102","job" => "开发工程师"),array("name" => "黄蓉","number" => "103","sex" => "女","job" => "产品经理") ); //判断如果是get请求,则进行搜索;如果是POST请求,则进行新建 //$_SERVER是一个超全局变量,在一个脚本的全部作用域中都可用,不用使用global关键字 //$_SERVER["REQUEST_METHOD"]返回访问页面使用的请求方法 if ($_SERVER["REQUEST_METHOD"] == "GET") { search(); } elseif ($_SERVER["REQUEST_METHOD"] == "POST"){ create(); } //通过员工编号搜索员工 function search(){ //检查是否有员工编号的参数 //isset检测变量是否设置;empty判断值为否为空 //超全局变量 $_GET 和 $_POST 用于收集表单数据 if (!isset($_GET["number"]) || empty($_GET["number"])) { echo '{"success":false,"msg":"参数错误"}'; return; } //函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。 //global 关键词用于访问函数内的全局变量 global $staff; //获取number参数 $number = $_GET["number"]; $result = '{"success":false,"msg":"没有找到员工。"}'; //遍历$staff多维数组,查找key值为number的员工是否存在,如果存在,则修改返回结果 foreach ($staff as $value) { if ($value["number"] == $number) { $result = '{"success":true,"msg":"找到员工:员工编号:' . $value["number"] . ',员工姓名:' . $value["name"] . ',员工性别:' . $value["sex"] . ',员工职位:' . $value["job"] . '"}'; break; } } echo $result; } //创建员工 function create(){ //判断信息是否填写完全 if (!isset($_POST["name"]) || empty($_POST["name"]) || !isset($_POST["number"]) || empty($_POST["number"]) || !isset($_POST["sex"]) || empty($_POST["sex"]) || !isset($_POST["job"]) || empty($_POST["job"])) { echo '{"success":false,"msg":"参数错误,员工信息填写不全"}'; return; } //Todo: 获取POST表单数据并保存到数据库 //提示保存成功 echo '{"success":true,"msg":"员工:' . $_POST["name"] . ' 信息保存成功!"}'; } ?>

其实ajax用jquery更加简单我直接附上代码大家一看就懂了

<!DOCTYPE HTML>
<html>
<head>
<Meta http-equiv="Content-Type" content="textml; charset=utf-8">
<title>Demo</title>
<style> body,h1 { font-size: 28px; line-height:1.7; } </style>    
</head>

<body>

<h1>员工查询</h1>

<label>请输入员工编号:</label>
<input type="text" id="keyword" />
<button id="search">查询<tton>
<p id="searchResult"></p>

<h1>员工新建</h1>
<label>请输入员工姓名:</label>
<input type="text" id="staffName" /><br>
<label>请输入员工编号:</label>
<input type="text" id="staffNumber" /><br>
<label>请选择员工性别:</label>
<select id="staffSex">
<option></option>
<option></option>
<lect><br>
<label>请输入员工职位:</label>
<input type="text" id="staffJob" /><br>
<button id="save">保存<tton>
<p id="createResult"></p>

<script src="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.js"></script>
<script> $(document).ready(function(){ $("#search").click(function(){ $.ajax({ type: "GET",url: "http://127.0.0.1:8080/ajaxdemo/serverjson2.PHP?number=" + $("#keyword").val(),dataType: "json",success: function(data) { if (data.success) { $("#searchResult").html(data.msg); } else { $("#searchResult").html("出现错误:" + data.msg); } },error: function(jqXHR){ alert("发生错误:" + jqXHR.status); },}); }); $("#save").click(function(){ $.ajax({ type: "POST",url: "serverjson.PHP",data: { name: $("#staffName").val(),number: $("#staffNumber").val(),sex: $("#staffSex").val(),job: $("#staffJob").val() },success: function(data){ if (data.success) { $("#createResult").html(data.msg); } else { $("#createResult").html("出现错误:" + data.msg); } },}); }); }); </script>
</body>

ajax的使用方法的更多相关文章

  1. canvas中普通动效与粒子动效的实现代码示例

    canvas用于在网页上绘制图像、动画,可以将其理解为画布,在这个画布上构建想要的效果。本文详细的介绍了粒子特效,和普通动效进行对比,非常具有实用价值,需要的朋友可以参考下

  2. H5混合开发app如何升级的方法

    本篇文章主要介绍了H5混合开发app如何升级的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. canvas学习和滤镜实现代码

    这篇文章主要介绍了canvas学习和滤镜实现代码,利用 canvas,前端人员可以很轻松地、进行图像处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. localStorage的过期时间设置的方法详解

    这篇文章主要介绍了localStorage的过期时间设置的方法详解的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. 详解HTML5 data-* 自定义属性

    这篇文章主要介绍了详解HTML5 data-* 自定义属性的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  6. HTML5的postMessage的使用手册

    HTML5提出了一个新的用来跨域传值的方法,即postMessage,这篇文章主要介绍了HTML5的postMessage的使用手册的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. 教你使用Canvas处理图片的方法

    本篇文章主要介绍了教你使用Canvas处理图片的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  9. ios – 错误域= NSURLErrorDomain代码= -1003“找不到具有指定主机名的服务器

    当我尝试在设备上运行应用程序时出现此错误.当我在模拟器上运行它并且post请求正常工作时,我没有收到此错误.这是我的代码片段:任何帮助表示赞赏.谢谢解决方法此错误通常会提示DNS相关问题.检查设备上的DNS设置并确认您可以使用Safari或其他浏览器浏览互联网.如果有一个url,你可以在同一台服务器上获取,尝试直接在设备上的Safari中访问它.

  10. ios – Xcode Bot:如何在post触发器脚本上获得.ipa路径?

    我正在使用机器人来存档iOS应用程序,我需要获取.ipa产品路径才能将其发布到我们的分发系统中.机器人设置:并使用脚本打印所有env变量,其中不包含ipa文件的路径.此外,一些变量指向不存在的目录,即:XCS_OUTPUT_DIR这里的env变量输出:除此之外,我还能够确认.ipa文件是在另一个文件夹中创建的(/IntegrationAssets//

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部