原生ajax中get和post请求

强颜欢笑 提交于 2019-12-30 21:18:18

后台代码:

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

>这里

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!