zoukankan      html  css  js  c++  java
  • Ajax

    一、form表单传送数据
     
                action            表单提交地址
                method            提交方法
                    1、get
                        提交的数据通过地址栏发送,数据添加到地址栏的问号后面
                        数据形式:数据名=数据值&数据名=数据值
                                username=输入的内容&password=输入的内容
                    2、post
                        提交的数据通过请求头发送(头部信息,能过控制台可以看到)       
                        <!--name是用来存储数据的,--> 
                    <!--没有Ajax以前就用form来把数据传送-->
    1. <form action="http://baidu.com/" method="get">
    2. 用户名:<input type="text" name="username" />
    3. 密码:<input type="password" name="password" />
    4. <input type="submit" />
    5. </form>
     
    二、Ajax是什么
                 * Ajax是一种技术方案,但并不是一种新技术。它依赖的是现有的CSS/HTML/Javascript,而其中最核心的依赖是浏览器提供的XMLHttpRequest对象,是这个对象使得浏览器可以发出HTTP请求与接收HTTP响应
                 *                     XMLHttpRequest作用和form一样。
                 * ajax:Asynchronous JavaScript and XML(异步js和XML)
                 *     异步js:js的代码都是至到而下执行的(同步),如果一块代码没有执行完毕,那后面的代码就不会执行。异步就是ajax可以做到不按顺序执行
                 *     XML:存储数据的一种格式
                 *         <name>陈学辉</name>
                 *         <age>18</age>
                 *         <qq>356985332</qq>
                 *         <email>kaivon@126.com</email>
                 * 
                 *         ajax不光能够处理XML格式的数据,还可以处理json、数组、字符串类型的数据
                 * 
                 * ajax到底能干嘛
                 *     js与后端进行数据交互的一种技术,通过请求协商好的接口,来获取到想要的数据
                 * 
                 * 优点
                 *     传输数据时候会在本页面请求服务器,不用跳转页面,从而减轻服务器压力。做到实时验证,减少用户返工率并且优化用户体验
    三、服务器环境的安装     
                 * AJAX是基于http(https)(线上)协议,所以只能在HTTP服务器环境下运行。我们在本地打开的页面,走的是file协议。
                 * 本地安装服务器环境用wampserver
                 *     1、www目录下的文件夹不能以中文命名,但是文件里面的html文件可以用中文命名
                 * 
                 *  第三方的软件中的目录就代表了线上的环境了(用本地路径摸你线上)
                 *     以后的文件就要放在这个www的文件目录下          
                  *    运行的地址(一定要在locallhost下运行才可以)
                        localhost/该页面存放在www的那个文件夹的名称/页面的名字
                
     
     四、Ajax交互流程
                1.XMLHttpRequset(不兼容低版本浏览器IE6)
    1. //因为XMLHttpRequest是浏览器身上的,如果没有就说明在IE6的环境下了。
    2. //IE6提供的XMLHttpRequest是在ActiveXObject('Microsoft.XMLHTTP')身下
    3. var ajax=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject('Microsoft.XMLHTTP');
                2.
                 * ajax.readyState        AJAX运行步骤(第一步捕捉不到)
                 *     它的值为4的话说明AJAX已经运行完成
                 *         0    初始化            还没有调用open()方法
                 *        1    载入            已调用send()方法,正在发送请求
                 *        2    载入完成        send()方法完成,已收到全部响应内容
                 *        3    解析            正在解析响应内容
                 *        4    完成            响应内容解析完成,可以在客户端调用了
                 * 
                 * 
                 * ajax.status            服务器对请求的反馈(状态码)
                 *         200就是成功的,404就是错误的
                3.
                 * onreadystatechange        
                 *         readyState的值发生改变时触发的事件,只要这个值有变化就会触发
                 * 
                 * onload
                 *        所有请求成功完成后触发,此时readystate的值为4
                 *         (IE678兼容)

                4.* ajax数据交互流程         
                 * 1、创建一个ajax对象            买了一个电话
                 * 2、填写请求地址                输入号码
                 * 3、发送请求                    拨号
                 * 4、等待服务器响应                等待
                 * 5、接收数据                    通话
      有两种方法,一种用get,一种用post它们的区别是
                get方式
                    1、通过地址栏信息进行数据传输,传输的大小有限制
                    2、不安全,用户的所有信息都会暴露出来
                    3、拼接数据的时候要用encodeURI转一下码,不然有中文就会乱码(在IE6下)
                    4、不用设置请求头
                    5、数据拼接在open方法里
                    6、会有缓存问题
                    
                post方式
                    1、通过send向服务器传输数据,理论上来说是没有长度或体积限制
                    2、相对来说安全,因为不直接暴露用户信息
                    3、不用转码,已经通过请求头设置了数据格式,不会有乱码
                    4、在send()的前面需要设置一个请求头(不设置要出错)
                        ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                    5、数据要拼接在send方法里
                    6、没有缓存问题
    用get的方法
    1. window.onload=function(){
    2. var inputs=document.querySelectorAll("input");
    3. inputs[2].onclick=function(){
    4. var val=inputs[0].value;
    5. //1、创建一个ajax对象
    6. var ajax=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP');
    7. //2、填写请求地址 方法用get还是post是看后端文件的 ?后面的就是发送的数据,而这个存数据的变量名字也要和后端文件里的名字对应才可以
    8. ajax.open('get','php/get.php?user='+encodeURI(val),true);
    9. //.php为后台的文件
    10. //3、发送请求
    11. ajax.send();
    12. //4.等待服务器响应
    13. if(typeof ajax.onload=='undefined'){
    14. ajax.onreadystatechange=result;
    15. }else{
    16. ajax.onload=result;
    17. }
    18. //5、接收数据
    19. function result(){
    20. if(ajax.readyState==4){
    21. if(ajax.status==200){
    22. var span=document.querySelector("span");
    23. span.innerHTML=ajax.responseText;
    24. }else{
    25. alert('返回数据失败')
    26. }
    27. }
    28. }
    29. };
    30. };
    31. 用户名:<input type="text" name="username" /><span></span><br /><br />
    32. 密码:<input type="password" name="password" />
    33. <input type="button" value="提交" />
    用post的方法
     
    1. window.onload=function(){
    2. var inputs=document.querySelectorAll("input");
    3. inputs[2].onclick=function(){
    4. var val=inputs[0].value;
    5. //1、创建一个ajax对象
    6. var ajax=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP');
    7. //2、填写请求地址 方法用get还是post是看后端文件的 ?后面的就是发送的数据,而这个存数据的变量名字也要和后端文件里的名字对应才可以
    8. //open里面的true和false是决定其执行模式, true是异步 false是同步
    9. ajax.open('post','php/post.php',true);
    10. //.php为后台的文件
    11. //3、发送请求
    12. //post的方法要在send之前设置表头
    13. ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    14. ajax.send('user='+val);
    15. //4.等待服务器响应
    16. if(typeof ajax.onload=='undefined'){
    17. ajax.onreadystatechange=result;
    18. }else{
    19. ajax.onload=result;
    20. }
    21. //5、接收数据
    22. function result(){
    23. if(ajax.readyState==4){
    24. if(ajax.status==200){
    25. var span=document.querySelector("span");
    26. span.innerHTML=ajax.responseText;
    27. }else{
    28. alert('返回数据失败')
    29. }
    30. }
    31. }
    32. };
    33. };
    34. 用户名:<input type="text" name="username" /><span></span><br /><br />
    35. 密码:<input type="password" name="password" />
    36. <input type="button" value="提交" />

    五、Ajax上传
    1. /* //ajax的上传配合表单input type='file'这个控件 和progress
    2. * 上传只能用post的方式,并且后台需要处理中文
    3. * ajax.upload.onprogress 上传的进度事件
    4. * ev.loaded 已经上传文件的大小
    5. * ev.total 总文件的大小
    6. *
    7. * FormData 用来创建与表单格式相同的数据,它是由XMLHttpRequest 2级定义。获取到的是一个二进制数据
    8. * //其里面会拼接数据
    9. * FormData.append(文件名,文件值)
    10. *
    11. * files 上传选中的所有文件列表,放在type为file的表单控件中
    12. * 这里包括:最后修改的时间、大小、类型等等
    13. */
    14. window.onload=function(){
    15. var inputs=document.querySelectorAll("input");
    16. var progress=document.querySelector("progress");
    17. inputs[1].onclick=function(){
    18. var ajax=new XMLHttpRequest();
    19. ajax.open('post','php/post_file.php',true);
    20. //上传进度监听的事件
    21. ajax.upload.onprogress=function(ev){
    22. progress.value=ev.loaded/ev.total*100;
    23. };
    24. //console.log(inputs[0].files);
    25. //input type='flie' 身上有files事件,文件信息储存在这里面
    26. //把上传的数据拼接然后发送给后台, 以下就是拼接数据
    27. var formadata=new FormData();
    28. for(var i=0;i<inputs[0].files.length;i++){
    29. //这里就是拼接数据
    30. formadata.append('file',inputs[0].files[i]);
    31. }
    32. ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    33. ajax.send(formadata);
    34. ajax.onload=function(){
    35. };
    36. };
    37. };
    38. <!--progress是H5新增的 显示进度条-->
    39. <progress value="0" max="100"></progress>
    40. <!--multiple是可以多选文件的意思--> <!--accept决定上传文件的格式-->
    41. <!--<input type="file" multiple="multiple" accept="application/pdf" />-->
    42. <input type="file" multiple="multiple" />
    43. <input type="button" value="提交" />







  • 相关阅读:
    java、el表达式中保留小数的方法
    EL表达式取整数或者取固定小数位数的简单实现
    Spring框架学习之第8节
    shell脚本接收输入
    awk除去重复行
    awk过滤统计不重复的行
    Spring框架学习之第7节
    jsp中利用checkbox进行批量删除
    javaScript解决Form的嵌套
    Spring框架学习之第6节
  • 原文地址:https://www.cnblogs.com/CafeMing/p/6714577.html
Copyright © 2011-2022 走看看