flask和ajax中的post和get方法小结

来源:互联网 发布:书包推荐 知乎 编辑:程序博客网 时间:2024/05/22 03:29

最近在学python的web开发,非常喜欢python简洁干净的语法,一向不是非常喜欢集成东西多的框架,正好公司里用的是flask这种“micro framework”,就开始自学。学了个大概之后首先遇到的问题时,如何用get和post进行前后端数据交互。网上对于flask的问题不是非常多,就自己小结一下。


1. ajax vs get

$.ajax({type: "get",url: "http://127.0.0.1:5000/login",contentType: "application/json;charset=utf-8",dataType: "json",data: "username="+$("#username input").val()+"&password="+$("#password input").val(),success: function(data){//handle data}});

$.get({"http://127.0.0.1:5000/login",{"username": $("#username input").val(),"&password": $("#password input").val()},success: function(data){//handle data}});


当时遇到一个很奇怪的问题,用$.get的简略ajax方法,返回的data中如果有中文会出现乱码,无论如何在后端方法中加入encode('utf8')都无法解决。后来通过修改为最原始的ajax方法,可能是定义了contentType中的charset,乱码问题顺利解决

2. ajax vs post

$.ajax({type: "post",url: "http://127.0.0.1:5000/submitSheet",contentType: "application/json;charset=utf-8",dataType: "json",data: {'location': $("#location").val()},success: function(data){//handle data}});

$.post("http://127.0.0.1:5000/submitSheet",{'location':$("#location").val()},function(data){var json = JSON.parse(data);alert(json.result);});


由于直接用get方法曾遇到过乱码问题,在遇到较大数据传输时就直接选择了用$.ajax的原始形式,可是发现总是报400 bad request错误,而后台的数据获取绝对正确,所以又尝试了用$.post的简略形式,又顺利解决问题。


到了这里其实有点奇怪,本人也只是时间之余自己学习,对底层技术并不非常了解。对于get\post\ajax的选择问题还有待发掘其中的秘密。


3. 处理返回的data

假设后端返回的数据格式为:

return json.dumps({'status': status, 'result': result})

如果使用$.ajax,其中定义了dataType为json格式,所以可以直接用data.status和data.result来获取数据,如果result也是json格式的,但是在传输数据时冒号后面的部分会被转化为string,所以可能需要用JSON.parse(转化为json格式. 

如果是使用$.get或者$.post,那么在处理data时需要首先使用JSON.parse()将string转化为json格式。