web ajax

ajax  

 ajax补充点

1 发送ajax提交时候的url的路径一定要加/

 
 $.ajax({
                url: '/index/',
                type: 'POST',
})

2 data数据的value一定要是字符串

var post_data_str = JSON.stringify(post_data_dict);//序列化成字符串 
 $.ajax({
                url: '/index/',
                type: 'POST',
                data: { 'post_data': post_data_str},
                dataType: 'json', #返回接收的时候反序列化
})

  

  

 

 

 

我的案例

 

my_index.py

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
__author__ = 'liujianzuo'


import tornado.ioloop
import tornado.web
import time

class LoginHandler(tornado.web.RequestHandler):

    def get(self, *args, **kwargs):
        self.render("index.html")

    def post(self, *args, **kwargs):
        dic = {
            "status":True,
            "msg":"",
        }
        username = self.get_argument("username",None)  # 获取浏览器发送过来的表单name值位username的value
        pwd = self.get_argument("password",None)
        if username == "alex" and pwd == "123":
            pass
        else:
            dic['status'] = False
            dic['message'] = "用户名或密码错误"

        import json
        self.write(json.dumps(dic))


settings = {
    "template_path":"views",  # 模板路径的配置
    "static_path": 'static',
}


# 路由映射,路由系统
application = tornado.web.Application([
    (r"/login",LoginHandler)
],**settings)


if __name__ == '__main__':
    # socket运行起来
    application.listen(8889)
    tornado.ioloop.IOLoop.instance().start()

 index.html 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
        <input id="user" type="text" name="username" />
        <input id="pwd" type="password" name="password" />
        <input id="check" type="checkbox" name="auto" value="1">7天免登录
        <input type="button" value="登录" onclick="SubmitForm();" />

        <div id="i1"></div>
        <script>
            xhr = null;
            function SubmitForm() {

                xhr = new XMLHttpRequest(); //创建 ajax 对象
                xhr.open("POST", "/login",true); //连接服务器
                xhr.onreadystatechange = func; //接收返回值
                xhr.setRequestHeader('content-type',"application/x-www-form-urlencoded; charset=UTF-8");
                xhr.send("username="+ document.getElementById('user').value +";password="+ document.getElementById('pwd').value);

            }
            function func() {

                /*
                readyState:请求状态,返回的是整数(0-4)。
                0(未初始化):还没有调用 open() 方法。
                1(载入):已调用 send() 方法,正在发送请求。
                2(载入完成):send() 方法完成,已收到全部响应内容。
                3(解析):正在解析响应内容。
                4(完成):响应内容解析完成,可以在客户端调用。
                status:请求结果,返回 200 或者 404。
                200 => 成功。
                404 => 失败。
                responseText:返回内容,即我们所需要读取的数据。需要注意的是:responseText 返回的是字符串。
                */

                if(xhr.readyState == 4){
                    console.log(1);
                    console.log(xhr.responseText);
                    var data = xhr.responseText;
                    var ret_dict = JSON.parse(data);
                    console.log(ret_dict)
                    if(ret_dict.status){

                    }else{
//                        alert(ret_dict.message);
                        document.getElementById("i1").innerText = ret_dict.message
                        document.getElementById("i1").style.color = "red"
                    }
                }

            }
        </script>
</body>
</html>

  

 

什么是 ajax

ajax 即“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML),也就是无刷新数据读取。

http 请求

首先需要了解 http 请求的方法(GET 和 POST)。

GET 用于获取数据。GET 是在 URL 中传递数据,它的安全性低,容量低。

POST 用于上传数据。POST 安全性一般,容量几乎无限。

ajax 请求

ajax 请求一般分成 4 个步骤。

1、创建 ajax 对象

在创建对象时,有兼容问题:

var oAjax = new XMLHttpRequest();   //for ie6 以上
var oAjax = new ActiveXObject('Microsoft.XMLHTTP'); //for ie6

合并上面的代码:

var oAjax = null;
if(window.XMLHttpRequest){
    oAjax = new XMLHttpRequest();
}else{
    oAjax = new ActiveXObject('Microsoft.XMLHTTP');
}

2、连接服务器

在这里会用到 open() 方法。open() 方法有三个参数,第一个参数是连接方法即 GET 和 POST,第二个参数是 URL 即所要读取数据的地址,第三个参数是否异步,它是个布尔值,true 为异步,false 为同步。

oAjax.open('GET', url, true);

3、发送请求

send() 方法。

oAjax.send();

4、接收返回值

onreadystatechange 事件。当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件。

readyState:请求状态,返回的是整数(0-4)。

0(未初始化):还没有调用 open() 方法。

1(载入):已调用 send() 方法,正在发送请求。

2(载入完成):send() 方法完成,已收到全部响应内容。

3(解析):正在解析响应内容。

4(完成):响应内容解析完成,可以在客户端调用。

status:请求结果,返回 200 或者 404。

200 => 成功。

404 => 失败。

responseText:返回内容,即我们所需要读取的数据。需要注意的是:responseText 返回的是字符串。

oAjax.onreadystatechange=function(){
    if(oAjax.readyState==4){
        if(oAjax.status==200){
            fnSucc(oAjax.responseText);
        }else{
            if(fnFaild){
                fnFaild();
            }
        }
    }
};

将以上代码进行封装:

function ajax(url, fnSucc, fnFaild){
    //1.创建对象
    var oAjax = null;
    if(window.XMLHttpRequest){
        oAjax = new XMLHttpRequest();
    }else{
        oAjax = new ActiveXObject("Microsoft.XMLHTTP");
    }
      
    //2.连接服务器  
    oAjax.open('GET', url, true);   //open(方法, url, 是否异步)
      
    //3.发送请求  
    oAjax.send();
      
    //4.接收返回
    oAjax.onreadystatechange = function(){  //OnReadyStateChange事件
        if(oAjax.readyState == 4){  //4为完成
            if(oAjax.status == 200){    //200为成功
                fnSucc(oAjax.responseText) 
            }else{
                if(fnFaild){
                    fnFaild();
                }
            }
        }
    };
}

  最后附上实例:

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>ajax基础</title>
</head>
<body>
    点击按钮的时候,读取abc.txt<input id="btn" type="button" value="读取"/><br/>
    <div id="con"></div>
</body>
</html>
<script type="text/javascript" src="ajax.js"></script>
<script type="text/javascript">
window.onload = function(){
    var oBtn = document.getElementById('btn');
    var oCon = document.getElementById('con');
    oBtn.onclick = function(){
        ajax('abc.txt',function(str){
            oCon.innerHTML = str;
        });
    }
}
</script>

  

abc.txt 内容:

这是ajax调用的内容1。
这是ajax调用的内容2。
这是ajax调用的内容3。

  

posted @ 2016-07-21 23:02  众里寻,阑珊处  阅读(151)  评论(0编辑  收藏  举报
返回顶部