zoukankan      html  css  js  c++  java
  • 原生ajax中get和post请求

    后台代码:

    class AjaxHanlder(tornado.web.RequestHandler):
        def get(self):
            print(self.get_argument('type',None))
            if self.get_argument('type',None):
                self.write("get ok")
            else:
                self.render('ajax_test.html')
    
        def post(self, *args, **kwargs):
            self.write("post ok")

    前端ajax:

    为了兼容各个浏览器都有ajax方法

        function GetXhr(){
            var xhr=null;
            if(XMLHttpRequest){
                xhr=new XMLHttpRequest();
            }else{
                xhr=new ActiveXObject("Microsoft.XMLHTTP");
            }
            return xhr;
        }

    其中get请求一般都把数据放到url中,而不是send()中

    function XhrGetRequest(){
    var xhr=GetXhr();
    //定义回调函数
    xhr.onreadystatechange=function(){
    if(xhr.readyState==4){
    document.getElementsByClassName('reponse')[0].innerHTML=xhr.responseText;
    }
    }
    //指定连接方式和地址---文件方式
    xhr.open('get',"/ajax?type=1&kk=2",true);
    //发出请求
    xhr.send(null);
    }

    只有post请求时,需要将数据放到send()中传递,并且需要设置请求头

    function XhrPostRequest(){
    var xhr=GetXhr();
    xhr.onreadystatechange=function(){
    if(xhr.readyState==4){
    document.getElementsByClassName('reponse')[0].innerHTML=xhr.responseText;
    }
    }
    xhr.open('post','/ajax',true);
    //post需要设置请求头
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset-UTF-8");
    //发送请求
    xhr.send("type=1&kk=2");
    }

    使用案例:

    <body>
        <form method="post" action="login">
            用户名:<input id="user" type="text" name="username">
            密码:<input id="pwd" type="password" name="password">
            <input type="checkbox" id="auto" name="auto" value="1"/>七天免登录
            <input type="button" onclick="SubmitForm();" value="登录">
            <span class="err"></span>
        </form>
    </body>
    </html>
    <script>
        var xhr=null;
    
        function SubmitForm(){
            var username=document.getElementById("user").value;
            var pwd=document.getElementById('pwd').value;
            var chkEle=document.getElementById('auto');
            var chk=null;
            if(chkEle.checked==true)
                chk=1;
            else
                chk=0;
    
            xhr=new XMLHttpRequest();
            /*参数    发送方式  发送地址 是否异步*/
            //xhr.open('GET',"/login",true);
            xhr.open("POST","/login",true);
            //当readystate值改变时会自动去触发对应函数,先对这个值进行判断,在决定对应的函数
            //0.未初始化,尚未调用open
            //1.启动,调用了open未调用send
            //2.发送,调用了send,未收到响应
            //3.接收,已经接收到了部分响应消息
            //4.完成,已经接收到所有的数据
    
            xhr.onreadystatechange =func;
            //setRequestHeader(String header,String value)设置请求头
            //getAllResponseHeaders()获取所有响应头
            //getResponseHeader(String header)获取响应头中指定的header的值
            //void abort()终止请求
    
            //post发送数据需要设置请求头
            xhr.setRequestHeader('content-type','application/x-www-form-urlencoded; charset-UTF-8')
            //用于发送数据
            xhr.send('username='+username+';password='+pwd+';auto='+chk);
    
            //String responseText   服务器返回的数据字符串类型
    
            //XmlDocument responseXML 服务器返回的数据(xml对象)
    
            //Number states 状态码
    
            //String statesText 状态码对应文本
        }
    
        function func(){
            if(xhr.readyState == 4){
                console.log(xhr.responseText);
                var data=xhr.responseText;
                var ret_dict = JSON.parse(data);
                if(ret_dict.status){
                    //登录成功
                }else{
                    //登录失败
                    var ele=document.getElementsByClassName('err')[0];
                    ele.innerHTML="<h1 style="color:red;">"+ret_dict.message+"</h1>"
                }
            }
        }
    </script>

    open(请求方式, URL, 是否异步)

    send(请求体)

    onreadystatechange,指定监听函数,它会在xmlHttp对象的状态发生变化时被调用

    readyState,当前xmlHttp对象的状态,其中4状态表示服务器响应结束

    status:服务器响应的状态码,只有服务器响应结束时才有这个东东,200表示响应成功;

    responseText:获取服务器的响应体

    代码实例:

    <div>
        <table border="1">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>姓名</th>
                    <th>年龄</th>
                    <th>性别</th>
                    <th>班级</th>
                    <th>编辑</th>
                </tr>
            </thead>
            <tbody>
                    <tr><td>4</td>
                        <td>李四</td>
                        <td>16</td>
                        <td>男</td>
                        <td>C++工程师</td>
                        <td><a onclick="XhrPostRequest(this);">删除</a>|<a href="/edit_student.html?nid=4">编辑</a></td>
                    </tr>
                    <tr><td>5</td>
                        <td>fas</td>
                        <td>15</td>
                        <td>男</td>
                        <td>Python工程师</td>
                        <td><a onclick="XhrPostRequest(this);">删除</a>|<a href="/edit_student.html?nid=5">编辑</a></td>
                    </tr>
            </tbody>
        </table>
    </div>
    </body>
    <script>
    var xhr=null
    var thr=null
    function GetXhr(){
    if(XMLHttpRequest){
    var Xh = new XMLHttpRequest();
    }else{
    Xh = new ActiveXObject('Microsoft.XMLHTTP');
    }
    return Xh
    }

    function call_func(){
    if(xhr.readyState == 4){
    var data=xhr.responseText;
    var ret_dict = JSON.parse(data);
    if(ret_dict.status){
    //登录成功
    alert("删除成功")
    thr.parentElement.parentElement.remove()
    }
    }
    }

    function XhrPostRequest(ths){
    thr=ths
    xhr=GetXhr();
    xhr.onreadystatechange = call_func;
    var id=thr.parentElement.parentElement.childNodes[0].textContent;
    xhr.open('get','/del_student.html?nid='+id);
    xhr.send();
    }
    </script>

     关于更多信息,以及jquery中ajax使用可以参考

    更多请看:原生ajax中get和post请求

    更多请看:http://www.cnblogs.com/yuanchenqi/articles/5997456.html

    >这里

  • 相关阅读:
    JQuery Ajax动态生成表格
    简单模拟JQuery框架
    事务和锁学习
    Js面向对象和数据类型内存分配
    Spring.Net学习 控制反转(IoC)和面向切面编程(AOP)
    html <pre>标签
    裸眼3D
    sysobjects syscolumns和SysTypes笔记
    JQuery EasyUi练习Demo(带源码)
    Oracle 游标使用大全
  • 原文地址:https://www.cnblogs.com/ssyfj/p/8532890.html
Copyright © 2011-2022 走看看