【发布时间】:2018-06-18 23:35:51
【问题描述】:
我正在尝试将此 ajax 请求发送到 python(使用 django 框架):
$.ajax({
url: '/search/',
type: 'post',
data: {
mname: mname,
fname: fname
},
success: function (data) {
console.log("result from python: " + data.result);
}
});
来自djangoviews.py的观点:
def my_search(request): before sending here
if request.method == 'POST':
mname = request.POST['mname']
fname = request.POST['fname']
但是在发送数据后我得到了:
异常类型:MultiValueDictKeyError
异常值:'mname'
我关注this answer 并更改了如下代码:
Ajax 数据部分:
data: {
json_data: JSON.stringify({ info: {'mname':mname,'fname': fname} })
},
views.py:
data_string = request.POST.get('json_data')
data_dict = json.loads(data_string)
mname = data_dict['info']['mname']
fname = data_dict['info']['fname']
但现在我明白了:
异常类型:TypeError
异常值:JSON 对象必须是 str,而不是 'NoneType'
这显然与第一次尝试错误有关,这意味着 python 未接收到从 ajax 发送的数据。
我该如何解决这个问题?
更新
我使用了Django Documentations about AJAX 并像这样更新了我的代码:
var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();
var mname = $("#sname").val();
var fname = $("#fname").val();
var json_data = {
"mname": mname,
"fname": fname
};
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
$("#search-btn").click(function(event){
event.preventDefault();
$.ajax({
url: '/search/',
type: 'post',
dataType : "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(json_data),
success: function (data) {
console.log("result from python: " + data.result);
}
});
});
另外,this post 建议使用代码来检查我尝试过的 POST 数据,但没有任何输出
for key in request.POST: print(key) value = request.POST[key] print(value)
这适用于我使用表单action 发布没有 ajax 的数据,但在这里它什么也没得到。
有什么想法吗?
【问题讨论】:
标签: ajax django python-3.x