Ajax使用学习
本文转载自:http://www.jianshu.com/p/ff9e1139ea51 一、简介1.ajax是Asynchronous Javascript and XML的缩写,意思是执行异步的网络请求 二、XMLHttpRequest对象ajax的实现流程如下: 1.创建XHR对象 所以创建对象的时候需要有兼容性写法 if(window.XMLHttpRequest){
var request = new XMLHttpRequest();
}else{
//这是ie7以下的写法
var request = new ActiveXObject("Microsoft.XMLHttp");
}
2.调用open()方法 request.open(method,url,boolean);
open()方法接收3个参数:
get方式请求: url = "地址 ? name1=value1 & name2=value2";
//获取到用户名及密码的输入框
var username = document.getElementById("username");
var passwd = document.getElementById("passwd");
//将输入内容附加在URL后面
var url = "php/get.php?username="+username.value+"&passwd="+passwd.value;
//调用open()方法
request.open("get",url,true);
post方式请求: //获取到用户名及密码的输入框
var username = document.getElementById("username");
var passwd = document.getElementById("passwd");
//将输入内容附加在URL后面
var url = "php/post.php";
//调用open()方法
request.open("post",true);
注意:因为已经不再使用form表单,所以后台无法再使用name属性获取数据,之前定义在form表单name属性中的内容现在就是在name1=value1中的name1中,相应的,post方式就是下文中的postbody中的name1。 3.调用send()方法 request.send(postbody);
send()方法接收1个参数:
get方式请求: post方式请求: postbody = "name1=value1 & name2=value2";
//获取到用户名及密码的输入框
var username = document.getElementById("username");
var passwd = document.getElementById("passwd");
//将输入内容附加在URL后面
var postbody = "username="+username.value+"&passwd="+passwd.value;
//调用send()方法
request.send(postbody);
注意1:此处用post方式提交数据与用form表单提交毕竟有所不同,服务器会需要程序来读取并解析原始数据,所以我们需要使用XHR来模仿表单提交: //将Content的头部信息重新设置
//定义表单提交时的内容类型,并以适当类型创建一个字符串 request.setRequestHeader("Content-Type","application/x-www/form-unencoded");
注意2:这个方法只能加载open()方法之后,send()方法之前。 //实际使用方法
var username = document.getElementById("username");
var passwd = document.getElementById("passwd");
var url = "php/post.php";
request.open("post",true);
//放置的位置一定在这里
request.setRequestHeader("Content-Type","application/x-www/form-unencoded");
var postbody = "username="+username.value+"&passwd="+passwd.value;
request.send(postbody);
4.捕获请求状态,判断结果 XHR对象相关属性:
我们利用原生的onreadystatechange事件来监听readyState变化。 只要readyState的值有一个值变为另一个值,就会触发一次onreadystatechange事件,可以利用此事件来返回监听到的请求/响应过程状态值。 我们关心的是readyState值为4的情况,因为这是代表所有数据已经准备就绪;同时如果status返回的是200,那么可以确定该次请求/响应过程全部完成 status返回值如下: 注意:这里不要使用statusText去判断,因为该值在跨浏览器时不可靠 最后的返回结果,不管是什么类型内容,都会保存在responseText中 监听代码如下: //监听readyState状态与status返回值
request.onreadystatechange = function () {
if(request.readyState == 4 && request.status == 200){
alert(request.responseText);
}
}
综上所述的内容,就是整个ajax请求的全部流程,我们在js中最后拿到的就是后台返回的responseText,这里面保存的一般来说是JSON格式的字符串,我们可以将其转换成数组或者对象后提取其中的键值对。 三、封装使用一下代码是将上述的过程进行的封装,使得使用时只要调用函数并在回调函数中实现功能就可以了。 <script> /* * method是请求方式 * url是网络请求的地址 * postboidy是post方式请求时的提交数据 * successCallback是请求成功的函数 * errorCallback是请求失败的函数 */ function request (method,postbody,successCallback,errorCallback) { //创建一个请求对象 if(window.XMLHttpRequest){ var request = new XMLHttpRequest(); }else{ var request = new ActiveXObject("Microsoft.XMLHttp"); } if(arguments[0]=="POST"){ //创建请求 request.open(method,true); //设置上传类型 request.setRequestHeader("content-type","application/x-www-form-urlencoded"); }else if(arguments[0]=="GET"){ request.open(method,true); } //发送请求 request.send(postbody); //状态监听 request.onreadystatechange = function () { if(request.readyState ==4 && request.status == 200){ //请求成功的回调函数 if(successCallback){ successCallback(request.responseText); } } else if (request.readyState == 4 && request.status != 200) { //请求失败的回调函数 if(errorCallback){ errorCallback(request.statusText); } } } } </script>
使用方法举例: //html部分
//调用封装好的函数
<script src="request.js"></script>
<div class="form">
<input type="text" id="username">
<input type="password" id="passwd">
<button id="loginBtn">登录</button>
</div>
//js部分
<script> var username = document.getElementById("username"); var passwd = document.getElementById("passwd"); var loginBtn = document.getElementById("loginBtn") loginBtn.onclick = function () { //设置请求地址及提交内容 var url = "login.php"; var postbody = "username="+username.value+"&passwd="+passwd.value; //发起ajax请求,并使用回调函数实现功能 request("POST",function (resText) { //把json格式的字符串转换成对象 var obj = JSON.parse(resText); alert(obj.msg); }); } </script>
//php部分login.php
<?php //从请求中获取用户名和密码 $username = $_POST["username"]; $passwd = $_POST["passwd"]; //连接服务器 @$mysqli = new mysqli("localhost","root","","user"); $mysqli->query("set names utf8"); //查询语句 $sql = "SELECT * FROM user WHERE username='$username' AND passwd='$passwd'"; //数据库执行查询 $result = $mysqli->query($sql); //判断查询结果是否有值,并定义返回字符串 //echo出来的就是返回前端的数据 if($result->num_rows > 0){ echo '{"errorcode":0,"msg":"登陆成功"}'; }else{ echo '{"errorcode":1,"msg":"用户名或密码错误"}'; } //关闭服务器 $mysqli->close(); ?>
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |