最近在学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\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格式。