首页 / AJAX / 利用Ajax实现异步请求
利用Ajax实现异步请求
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了利用Ajax实现异步请求,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6477字,纯文字阅读大概需要10分钟。
内容图文
<form action="./11inner.php" method="post" target="abc"> 用户名:<input type="text" name="username"> 密 码:<input type="password" name="password"> <input type="submit" value="提交"> </form> <iframe src="" width="200" height="200" frameborder="2" name="abc"></iframe> PHP中的代码 <?php $uname = $_POST[‘username‘]; $pw = $_POST[‘password‘]; if($uname == ‘111‘ && $pw == ‘111‘) { //js中的parent表示父级页面 echo ‘<script> parent.document.getElementById("dv").innerHTML = "登录成功" </script>‘; } else { echo ‘<script> parent.document.getElementById("dv").innerHTML = "用户名或密码错误" </script>‘; } ?>
1、创建xhr对象 var xhr = null; if(window.XMLHttpRequest){ 标准浏览器 xhr = new XMLHttpRequest(); }else{ 非标准浏览器IE6/7/8 xhr = new ActiveXObject(‘Microsoft.XMLHTTP‘); } readyState==0表示xhr对象初始化完成 console.log(xhr.readyState + ‘---------1----------‘); 2、配置发送参数 var type = ‘get‘; var myurl = ‘./data.php‘; varasync = false;//第三个参数默认值就是true,表示异步;false表示同步 xhr.open(type,myurl,async); 3、发送 var param = null; xhr.send(param); readyState==1表示请求已经发出 4、处理响应(指定回调函数),如下的回调函数不是我们自己调用,而是由浏览器自动调用 那么浏览器在什么情况下调用?xhr.readyState(0、1、2、3、4)这个状态值发生变化的时候调用 xhr.onreadystatechange = function(){ if(xhr.status == 200){ if(xhr.readyState == 4){ 获取到服务器响应的数据 var result = xhr.responseText; } } } 如果是同步的请求,就没有必要使用回调函数了,直接通过xhr.responseText就可以得到数据 console.log(xhr.responseText);
get | post |
2.配置发送函数 encodeURI作用对get参数进行编码处理,防止乱码 var param = encodeURI(‘?username=‘+uname+‘&password=‘+pw); xhr.open(‘get‘,‘./data.php‘+param); 3.发送 xhr.send(null); | 2.配置发送函数 xhr.open(‘post‘,‘./33data.php‘); 设置请求头信息(对于post提交必须设置请求头) xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded‘); 3.发送 var param = ‘username=‘+uname+‘&password=‘+pw; xhr.send(param); |
1、Aja的get提交数据是通过url传递参数,并且需要对参数进行编码处理 2、xhr.send();方法参数固定为null | 1、Ajax的post提交方式通过xhr.send(); 函数传递的参数发送数据,而不是通过url传递数据 2、post提交方式必须设置请求头( xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencode‘); ) 3、post提交的数据不需要进行编码处理 |
http://www.baidu.com/a/ac/b?flag=123#abc | scheme://host:port/path?query#fragment |
http----scheme | scheme:通讯协议 http https ftp |
www.baidu.com---host | host:域名或IP地址 |
隐藏的 http的默认端口是80---port | port:端口 浏览器是隐藏的 |
a/ac/b---path | path:路径,端口到问号之间的部分 |
#后面的abc----fragment | fragment:锚点 hash(哈希),作用:定位页面中的某一确定位置 |
var url = ‘http://www.sina.com‘; var str = ‘http://www.baidu.com?username=张三&flag=‘+encodeURIComponent(‘://??:‘); console.log(encodeURI(str)); console.log(encodeURIComponent(str)); |
解析服务器服务器返回的xml形式的数据 var result = xhr.responseXML; | 解析服务器服务器返回的json形式的数据 var result = xhr.responseText; |
xml数据格式的缺点: 1.元数据(描述数据的数据):元数据占用的空间较多,不利于网络传输 2.不方便解析 | json数据格式 1.数据由键值对组成 2.键和值必须用双引号引起来 3.值得类型可以是:数值 字符串 数组 对象 |
json_encode();方法的作用:把数组转化成json字符串 $str = json_encode($arr); JSON.parse();作用:把字符串转成对象 var str = ‘{"username":"lisi","age":"12"}‘; var obj = JSON.parse(str); var obj = eval(‘(‘+str+‘)‘);//也可以实现 eval方法的作用就是把符合js语法 的字符串转成代码并执行 eval(‘console.log(111)‘);//输出111 | |
if(xhr.status == 200 && xhr.readyState == 4){ xml数据格式 var ret = xhr.responseXML; var books = ret.getElementsByTagName(‘book‘); var tag = ‘‘; for (var i = 0; i < books.length; i++) { var book = books[i]; var name = book.getElementsByTagName(‘name‘)[0].innerHTML; var author = book.getElementsByTagName(‘author‘)[0].innerHTML; var price = book.getElementsByTagName(‘price‘)[0].innerHTML; var desc = book.getElementsByTagName(‘desc‘)[0].innerHTML; tag += ‘<ul><li>‘+name+‘</li><li>‘+author+‘</li><li>‘+price+‘</li><li>‘+desc+‘</li></ul>‘; } var container = document.getElementById(‘container‘); container.innerHTML = tag; } | if(xhr.status == 200 && xhr.readyState == 4){ // 原生Ajax从服务器获取的原始数据是字符串(有可能是json格式的字符串) var result = xhr.responseText; // JSON.parse()的作用就是把json形式的字符串转化成对象 result = JSON.parse(result); console.log(result); var tag = ‘‘; for (var i = 0; i < result.length; i++) { var book = result[i]; tag += ‘<ul><li>‘+book.name+‘</li><li>‘+book.author+‘</li><li>‘+book.price+‘</li><li>‘+book.desc+‘</li></ul>‘ } var container = document.getElementById(‘container‘); container.innerHTML = tag; } |
<?php header(‘Content-Type:application/xml; charset=utf-8‘); ?> <?xml version=‘1.0‘ encoding=‘utf-8‘ ?> <booklist> <book> <name>三国演义</name> <author>罗贯中</author> <price>20</price> <desc>一个杀伐纷争的年代</desc> </book> </booklist> | <?php $arr = array( array(‘name‘=>‘三国演义‘,‘author‘=>‘罗贯中‘,‘price‘=>‘20‘,‘desc‘=>‘一个杀伐纷争的年代‘), ); json_encode()方法的作用:把数组转化成json字符串 $str = json_encode($arr); echo $str; print_r($arr);//也可以实现 ?> |
原文:https://www.cnblogs.com/smedas/p/12689211.html
内容总结
以上是互联网集市为您收集整理的利用Ajax实现异步请求全部内容,希望文章能够帮你解决利用Ajax实现异步请求所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。