入门到实操:AJAX:前后台数据交互搬运工

小咪咪 2023-05-28 14:22 14阅读 0赞

**

AJAX Asynchronous JavaScript and XML‘’数据传输格式‘’ (异步JavaScript和XML数据传输格式)

AJAX的优势
:节省用户操作,时间,提高用户体验,减少数据请求 传输获取数据

这里提到的同步和异步,是和现实生活中截然不同的:

**同步:**阻塞,当前程序运行,必须等前一个程序运行完毕以后,才能运行

**异步:**非阻塞,当前程序运行,和前面程序的运行没有任何关系。(所以我们常用异步处理)

数据传输的两种格式

1.XML (大型门户网站,网易,新浪等)

优点:
1.种类丰富
2.传输量非常大
缺点:
1.解析麻烦
2.不太适合轻量级数据(数据比较多)

2.JSON (95%移动端应用使用的json,常用于移动端)

优点:
1.轻量级数据
2.解析轻松
解析:1.JSON.pare()
2.JSON.stringify()
缺点:(相对概念)
1.数据种类比较少
2.传输数据量比较小
JSON的使用方法如下:
比如我们要去买一个家具,我们选好家具后需要在运输过程中将其拆卸运输,运送到家后再进行组装

所以JSON中提供JSON.stringify() JSON.parse() 将原函数中的数据转化为字符串进行传输 传输到了后再转换为数据的结构

  1. 宜家(买) 运输 我家
  2. 装好的 拆掉 装好
  3. 前端 运输 后端
  4. 数据结构(数组,对象) 字符串 数据结构
  5. XML/JSON XML/JSON
  6. JSON.stringify() JSON.parse()

JSON.stringify() 数据结构 转换为 字符串
JSON.parse() 字符串 =》数据结构

注意在服务器PHP端中也有两个转换方法

json_encode() 将数据结构转换成字符串

json_decode() 将字符串转换成对应的数据结构

ajax下载数据语法步骤(get方法)

1.创建ajax对象

  1. var xhr =new XMLHttpRequest();

XMLHttpRequest IE8一下不兼容
IE8以下声明ajax的方法是

  1. ActiveXObject("Microsoft.XMLHTTP");

所以我们需要写成兼容模式

  1. var xhr =null; //兼容模式
  2. try{
  3. xhr = new XMLHttpRequest();
  4. }catch(error){
  5. xhr = new ActiveXObject("Microsoft.XMLHTTP");
  6. }

2.调用open(默认get方法)

  1. xhr.open("get","1.txt",true);

第一个参数:请求方式 get post
第二个参数: url
第三个参数: 是否异步
true: 异步
false 同步

3.调用send 发送

  1. xhr.send();

4.等待数据响应

  1. xhr.onreadystatechange = function(){
  2. if(xhr.readyState == 4){
  3. alert(xhr.responseText);
  4. }
  5. }

这里需要注意一个函数:
responseText : 返回以文本形式存放
responseXML : 返回XML形式的内容
xhr.readyState 发生错误的时候调用(请求状态)
0 (初始化)调用open方法之前
1 (载入)已调动send()方法,正在发送请求
2 (载入完成)send方法完成,已收到全部响应
3 (解析)正在解析响应内容
4 (完成)响应内容解析完成,可以在客户端调用了

HTTP 状态码 ajax.status
AJAX 状态码说明:ajax.status == 200 表明HTTP状态正常
404代表错误等等,这里大家可以自己查一下。

对AJAX有了基本的认识,那么如何利用AJAX实现数据的收集,下载呢

form向服务器上传数据

1.GET方法
get方法:是直接将数据拼接在url后面进行提交。通过?进行拼接,查询字符串

  1. HTML标签如下:
  2. action 点击sumbit以后跳转到的url

metgod : 表单的提交数据的方式

  1. <form action="1.get.php" method="get">
  2. <input type="text" name='username' placeholder="用户名">
  3. <input type="text" name="age" placeholder="年龄">
  4. <input type="password" name="password" placeholder="请输入你的密码">
  5. <input type="submit">
  6. </form>

PHP服务器设置如下:

  1. <?php
  2. header('content-type:text/html;charset="utf-8"');
  3. error_reporting(0);
  4. //系统或者应用程序出错时弹出的,错误报告,编程人员根据这个报告的内容可以判断是那一段代码出错
  5. /* $_GET (全局的关联数组) 存放通过get提交 提交的所有数据 */
  6. $username= $_GET['username'];
  7. $age = $_GET['age'];
  8. $password = $_GET['password'];
  9. echo "你的名字:{ $username},你的年龄是{ $age},密码:{ $password}";
  10. ?>

执行结束后 网页为:
http://localhost/php/1.get.php?username=raoyangjun&age=22&password=123456
get方法
优点:
简单,直接在url中修改就可以重新提交
缺点:
1.不安全
2.地址栏中的数据最大2kb
3.没法实现上传

POST方法:
post的提交方法:post提交通过浏览器内部进行提交
action : 点击sumbit以后跳转到的url
metgod : 表单的提交数据的方式

HTML:注意:使用post方法form标签属性应添加enctype=“application/x-www-form-urlencoded”

  1. <form action="1.post.php" method="POST" enctype="application/x-www-form-urlencoded">
  2. <input type="text" name='username' placeholder="用户名">
  3. <input type="text" name="age" placeholder="年龄">
  4. <input type="password" name="password" placeholder="请输入你的密码">
  5. <input type="submit">
  6. </form>

PHP:

  1. <?php
  2. header('content-type:text/html;charset="utf-8"');
  3. error_reporting(0);
  4. //系统互殴应用程序出错时弹出的,错误报告,编程人员根据这个报告的内容可以判断是那一段代码出错
  5. /* $_POST (全局的关联数组) 存放通过POST提交 提交的所有数据 */
  6. $username= $_POST['username'];
  7. $age = $_POST['age'];
  8. $password = $_POST['password'];
  9. echo "你的名字:{ $username},你的年龄是{ $age},密码:{ $password}";
  10. ?>

执行结束后的url:http://localhost/php/1.post.php
好处:
1.安全
2.理论上没有上限
3.上传
缺点:比get复杂(底层);

2.从服务器下载数据

AJAX_GET 方法:

服务器数据:

  1. $username= $_GET['username'];
  2. $age = $_GET['age'];
  3. $password = $_GET['password'];
  4. echo "你的名字:{ $username},你的年龄是{ $age},密码:{ $password}";

HTML页面请求下载

  1. oBtn.onclick = function(){
  2. var xhr =null;
  3. try{
  4. xhr = new XMLHttpRequest();
  5. }catch(error){
  6. xhr = new ActiveXObject("Microsoft.XMLHTTP");
  7. }
  8. xhr.open("get","1.get.php?username=yyy&age=19&password=123abc",true);
  9. xhr.send();
  10. xhr.onreadystatechange = function(){
  11. if(xhr.readyState == 4){
  12. //判断本次下载的状态码是多少
  13. if(xhr.status==200){
  14. alert("下载成功");
  15. alert(xhr.responseText);
  16. }else{
  17. alert("Error"+xhr.status);
  18. }
  19. }
  20. }

AJAX_POST 方法

服务器数据:

  1. $username= $_POST['username'];
  2. $age = $_POST['age'];
  3. $password = $_POST['password'];
  4. echo "你的名字:{ $username},你的年龄是{ $age},密码:{ $password}";

HTML页面请求下载

  1. oBtn.onclick = function(){
  2. var xhr =null;
  3. try{
  4. xhr = new XMLHttpRequest();
  5. }catch(error){
  6. xhr = new ActiveXObject("Microsoft.XMLHTTP");
  7. }
  8. xhr.open("post","1.post.php",true);
  9. //设置send请求格式
  10. xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
  11. /* post提交的数据,需要通过send方法进行提交 ?name1=value&name2=value2 search name1=value&name2=value2 querystring */
  12. xhr.send("username=yyy&age=19&password=123abc");
  13. xhr.onreadystatechange = function(){
  14. if(xhr.readyState == 4){
  15. //判断本次下载的状态码是多少
  16. if(xhr.status==200){
  17. alert("下载成功");
  18. alert(xhr.responseText);
  19. }else{
  20. alert("Error"+xhr.status);
  21. }
  22. }
  23. }

注意GET 与 POST 方法下载数据的不同语法之处

GET方法中:

open的方法

  1. xhr.open("get","1.get.php?username=yyy&age=19&password=123abc",true);

send的方法

  1. xhr.send();

POST 方法中

open的方法

  1. xhr.open("post","1.post.php",true);

send方法,需要先设置send请求格式,写在send方法前

  1. xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");

send方法

  1. xhr.send("username=yyy&age=19&password=123abc");

ajax框架函数

学习到这里我们对AJAX的整体都有一定的了解了,其实在实际开发中我们常常将AJAX的方法进行函数封装,使用时只需调用该函数即可:

框架如下:(大家还是要自己分析哦)

框架中的函数:
method get/post
url 1.get.php / 1.post.php
data 数据
success 数据下载成功以后执行的函数
error 数据下载失败后执行的函数

  1. function $ajax({ method = "get", url ,data,success,error}){
  2. var xhr =null;
  3. try{
  4. xhr = new XMLHttpRequest();
  5. }catch(error){
  6. xhr = new ActiveXObject("Microsoft.XMLHTTP");
  7. }
  8. if(data){
  9. data = querystring(data);
  10. }
  11. if(method == 'get' && data){
  12. url +="?"+data;
  13. }
  14. xhr.open(method,url,true);
  15. if(method == 'get'){
  16. xhr.send();
  17. }else{
  18. xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
  19. xhr.send(data);
  20. }
  21. xhr.onreadystatechange = function(){
  22. if(xhr.readyState == 4){
  23. if(success){
  24. /* 如何去处理数据操作不确定 使用回调函数: */
  25. success(xhr.responseText);
  26. }else{
  27. if(error){
  28. error('Error'+xhr.status);
  29. }
  30. }
  31. }
  32. }
  33. }
  34. function querystring(obj){
  35. var str = '';
  36. for(var attr in obj){
  37. str += attr +"="+obj[attr]+"&";
  38. }
  39. return str.substring(0,str.length-1);
  40. }

总结:
前后端交互的流程:
1.通过ajax下载数据
2.分析数据,转成对应的数据结构
3.处理数据

发表评论

表情:
评论列表 (有 0 条评论,14人围观)

还没有评论,来说两句吧...

相关阅读

    相关 前后交互

    [通过AngularJS实现前端与后台的数据对接(一)——预备工作篇][AngularJS]       最近,笔者在做一个项目:使用AngularJS,从而实现前端与后