【Day41】Python之路——AJAX

什么是AJAX

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

优点:

  不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容

  不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行

ajax请求的本质:生成xmlHttpRequest对象

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>index</title>
    <script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
<form  action="" method="" >
    <input type="text" name="k1" value="v1">
    <input type="text" name="k2" value="v2">
    <input id="forms_btn" type="button" value="提交">
    {% csrf_token %}

</form>
<script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>

</body>
</html>

前端

下面是,前端以json格式 发往后端的JavaScript代码

<script>
   $("#forms_btn").click(function () {
       $.ajax({
           url:"/fromData/",
           type:"post",
           dataType:"json",
           headers:{"X-CSRFToken":$("[name=‘csrfmiddlewaretoken‘]").val()},
           contentType:"application/json",
           data:{
               "name":$("[name=‘k1‘]").val(),
               "name":$("[name=‘k2‘]").val(),
           },

       })

    })
</script>

注意:

  1、设置contentType

  2、设置headers

  3、data, 在后端接受到是以二进制形式(b‘password=v1&name=v2‘),需要反序列化

  4、后台取数据不能在POST中取,需要在body中取

dataType

前端设置dataType ,后端如果返回的非json数据,后端不能识别,但是不报错,

使用Ajax跨域

view层

def ajax_send(request):
    func=request.GET.get("callback")
    print("func",func)
    res={"name":"alex"}
    import json
    return HttpResponse("%s(‘%s‘)"%(func,json.dumps(res)))

ajax 无法跨域访问其他网站,

<script>

     $(".b1").click(function () {
         $.ajax({
             url:"http://127.0.0.1:8002/ajax_send/",    // 浏览器的同源策略的原因,AJax无法发送跨域请求
             success:function (data) {
                 alert(data)
             }
         })
     });
</script>

下面看如何解决跨域访问

跨域访问初级版

<script>
    function foo(s) {
       console.log(s);
       JSON.parse(s)
    }

    function kua_yu(url) {
             // 生成   script标签
            var $ele_script=$("<script>");  注意:使用了 $ele_script创建标签
            $ele_script.attr("src",url);
            $ele_script.attr("class","kuayu");
            // 添加到body中
            $("body").append($ele_script);   // 发送请求
            $(".kuayu").remove()             // 生成之后即删除,不会产生多余的标签
    }

    $(".b2").click(function () {
         kua_yu( "http://127.0.0.1:8002/ajax_send/?callback=foo")
    });
</script>

跨域访问进阶版

$(".b1").click(function () {

    $.getJSON("http://127.0.0.1:8002/ajax_send/?callback=?",function (data) {   // function 使用了回调函数,
            console.log(data);
        })
});

跨域访问高级版

<script>
$(".b1").click(function () {

   $.ajax({
       url:‘http://127.0.0.1:8002/ajax_send/‘,
       dataType:"jsonp",
       jsonp: ‘callback‘,
       jsonpCallback:"SayHi"
   });
});

$(".b2").click(function () {

         $.ajax({
           url:‘http://www.jxntv.cn/data/jmd-jxtv2.html?‘,
           dataType:"jsonp",
           jsonp: ‘callback‘,
           jsonCallback:"list"                            // 访问的函数名,可定制
       });

     });

function list(data) {
        console.log(data.data);
        $.each(data.data,function (i,weekday) {
            //console.log(j);  // {week: "周日", list: Array(19)}
            $("body").append("<p>"+weekday.week+"</p>");
            console.log(weekday.list);
            $.each(weekday.list,function (j,show) {
               s="<p><a href=‘"+show.link+"‘>"+show.name+"</a></p>"
                $("body").append(s);

            })

        })

    }

</script>

注意:jsonp 一定是GET请求

原文地址:https://www.cnblogs.com/huyangblog/p/8280330.html

时间: 2024-10-03 14:38:50

【Day41】Python之路——AJAX的相关文章

Python之路【第十七篇】:Django【进阶篇 】

Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')

七日Python之路--第九天

众所周知,代码这东西不是看出来的.程序这东西只哟一个标准. 下面找点开源的东西看看,学习一下大婶们的犀利编码...... 推荐一下: 虽然有点老了:http://www.iteye.com/topic/405150,还有就是GitHub上面搜索一下Django就能出来很多,当然还有OSChina.只是有个问题,就是Django版本不同,具体的内容可能会有些不同,但大概还是相同的.领略即可,然后书写自己的代码. 首要的还是官方文档. 看着还是有些难度的.偶然发现一个不错的Blog:http://w

Python之路【第十九篇】:爬虫

Python之路[第十九篇]:爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫. Requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务. import

Python之路【第十七篇】:Django之【进阶篇】

Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')

Python之路【第十八篇】:Web框架们

Python之路[第十八篇]:Web框架们 Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. 1 2 3 4 pip install bottle easy_install bottle apt-get install python-bottle wget http://bottlepy.org/bottle.py Bottle框架大致可以分为以下部分: 路

Python之路【第十七篇】:Django【进阶篇】

Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')

Python之路,Day18 - 开发一个WEB聊天来撩妹吧

Python之路,Day18 - 开发一个WEB聊天来撩妹吧 本节内容: 项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个群有管理员可以审批用户的加群请求,群管理员可以用多个,群管理员可以删除.添加.禁言群友 可以与聊天室里的人进行临时会话(与qq群一样) 可以在群中发图片 可以与好友一对一发文件 知识必备: django html\css\js bootstrap jquery, ajax 前景介绍 首先我们知道http

Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memc

七日Python之路--第十二天(Django Web 开发指南)

<Django Web 开发指南>.貌似使用Django1.0版本,基本内容差不多,细读无妨.地址:http://www.jb51.net/books/76079.html (一)第一部分 入门 (1)内置数字工厂函数 int(12.34)会创建一个新的值为12的整数对象,而float(12)则会返回12.0. (2)其他序列操作符 连接(+),复制(*),以及检查是否是成员(in, not in) '**'.join('**')   或  '***%s***%d' % (str, int)