json跨域调用python的方法详解


Posted in Python onJanuary 11, 2017

本文实例讲述了json跨域调用python的方法。分享给大家供大家参考,具体如下:

客户端:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  <title>jQuery-跨域请求</title>
  <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
  <script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
  </head>
   <script type="text/javascript">
  jQuery(document).ready(function(){
    $.ajax({
      type : "GET",
      url : "http://10.13.38.43:1234/?id=10&callback=?",
      dataType : "jsonp",
      jsonp: 'callback',
      success : function(json){
          alert(json.account);
        //$('#msg_box').html(json);
        //return true;
      }
    });
  });
  </script>
   <body>
  <div id="msg_box"></div>
  </body>
  </html>

服务端

import web
urls=('/','Index',)
class Index:
    def GET(self):
      inputdata=web.input()
      mycallbackfun=inputdata.callback
      #return 'hello' +inputdata.id
      return mycallbackfun+'({"account":"XX","passed":"true","error":"null"})'
app = web.application(urls, globals())
if __name__=='__main__':
    app.run()

附:jquery跨域请求方法简介

这里介绍jQuery跨域请求方法,并提供简单的示例代码供参考。

项目中关于ajax jsonp的使用,出现了问题:可以成功获得请求结果,但没有执行success方法,总算搞定了,记录一下。

function TestAjax()
{
  $.ajax({
    type : "get",
    async : false,
    url : "ajaxHandler.ashx", //实际上访问时产生的地址为: ajax.ashx?callbackfun=jsonpCallback&id=10
    data : {id : 10},
    cache : false, //默认值true
    dataType : "jsonp",
    jsonp: "callbackfun",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
    jsonpCallback:"jsonpCallback",
      //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
      //如果这里自定了jsonp的回调函数,则success函数则不起作用;否则success将起作用
    success : function(json){
      alert(json.message);
    },
    error:function(){
      alert("erroe");
    }
  });
}
function jsonpCallback(data) //回调函数
{
  alert(data.message); //
}
public class ajaxHandler : IHttpHandler
{
  public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "text/plain";
    string callbackfun = context.Request["callbackfun"];
    context.Response.Write(callbackfun + "({name:\"John\", message:\"hello John\"})");
    context.Response.End();
  }
  public bool IsReusable {get {return false;}
}

ajax请求参数说明:

dataType string 服务器返回的数据类型。
如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如XML MIME类型就被识别为XML。

可用值:

"xml": 返回 XML 文档,可用 jQuery 处理。
"html": 返回纯文本 HTML 信息;包含的script标签会在插入dom时执行。
"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了"cache"参数。

注意:在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)

"json": 返回 JSON 数据 。
"text": 返回纯文本字符串
"jsonp":jsonp格式。使用jsonp形式调用函数时,访问url时会自动将url后面添加上如"callback=callbackFunName" 以执行回调函数(callbackFunName)。

jsonp string

在一个jsonp请求中重写回调函数的名字。这个值用来替代在"callback=?"这种get或post请求中url参数里的"callback"部分,比如 jsonp:'callbackfun' 则将会生成"callbackfun=?"传给服务器。

jsonpCallback String 此参数为jsonp请求指定一个回调函数名。

这个值将用来取代jQuery自动生成的随机函数名。 即上面"callback=?"中的问号部分。

这主要用来让jQuery生成度独特的函数名,这样请求更容易,也能方便地提供回调函数和错误处理。

也可以在想让浏览器缓存GET请求的时候,指定这个回调函数名。

ajax jsonp与普通的ajax请求的主要区别在于——请求响应结果的处理。如上面代码所示的响应结果为:

jsonpCallback({ name:"world",message:"hello world"});

实际上就是调用jsonp回调函数jsonpCallback,并将要响应的字符串或json传入此方法,关于自定了jsonp的回调函数, success函数则不起作用,大概其底层的实现(当然这是默认的回调函数的时候,否则就不会执行success的方法吧):

function default_jsonpCallback(data)
{
  success(data); //在默认的回调方法中执行
}
Python 相关文章推荐
在Python的Flask中使用WTForms表单框架的基础教程
Jun 07 Python
举例讲解Python中metaclass元类的创建与使用
Jun 30 Python
对Python中实现两个数的值交换的集中方法详解
Jan 11 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
python圣诞树编写实例详解
Feb 13 Python
解决python父线程关闭后子线程不关闭问题
Apr 25 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
May 20 Python
Python-for循环的内部机制
Jun 12 Python
如何用Anaconda搭建虚拟环境并创建Django项目
Aug 02 Python
Python环境使用OpenCV检测人脸实现教程
Oct 19 Python
在Python中实现字典反转案例
Dec 05 Python
Python 的 f-string 可以连接字符串与数字的原因解析
Feb 20 Python
Python中遇到的小问题及解决方法汇总
Jan 11 #Python
python使用正则表达式匹配字符串开头并打印示例
Jan 11 #Python
SQLite3中文编码 Python的实现
Jan 11 #Python
利用python实现数据分析
Jan 11 #Python
使用python调用zxing库生成二维码图片详解
Jan 10 #Python
利用Python生成文件md5校验值函数的方法
Jan 10 #Python
python中执行shell的两种方法总结
Jan 10 #Python
You might like
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
jQuery判断密码强度实现思路及代码
2013/04/24 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
2014/05/19 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
jQuery中使用each处理json数据
2015/04/23 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
countup.js实现数字动态叠加效果
2019/10/17 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
Python的lambda匿名函数的简单介绍
2013/04/25 Python
Python 列表(List)操作方法详解
2014/03/11 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
高中毕业生生活的自我评价
2013/12/08 职场文书
师德师风的心得体会
2014/09/02 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
学位证书委托书
2014/09/30 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
初中生物教学随笔
2015/08/15 职场文书
《植树问题》教学反思
2016/03/03 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android