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 相关文章推荐
pycharm 使用心得(九)解决No Python interpreter selected的问题
Jun 06 Python
用Python的pandas框架操作Excel文件中的数据教程
Mar 31 Python
简单的python后台管理程序
Apr 13 Python
python分割列表(list)的方法示例
May 07 Python
python实现杨氏矩阵查找
Mar 02 Python
python3.4+pycharm 环境安装及使用方法
Jun 13 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
Jun 15 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
Sep 01 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
Nov 09 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
Nov 17 Python
Python环境搭建过程从安装到Hello World
Feb 05 Python
用Python爬取某乎手机APP数据
Jun 15 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
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
2014/06/12 PHP
分享一段PHP制作的中文拼音首字母工具类
2014/12/11 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
javascript html 静态页面传参数
2009/04/10 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
JavaScript实现图片拖曳效果
2017/09/08 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
2018/08/07 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
layer提示框添加多个按钮选择的实例
2019/09/12 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
浅谈python常用程序算法
2019/03/22 Python
python系列 文件操作的代码
2019/10/06 Python
python安装本地whl的实例步骤
2019/10/12 Python
keras中的backend.clip用法
2020/05/22 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
vue实现倒计时功能
2021/03/24 Vue.js
清洁工个人工作总结
2015/03/05 职场文书
单独二胎证明
2015/06/24 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android
用JS创建一个录屏功能
2021/11/11 Javascript