我是ajax的新手,所以希望这是一个简单的疏忽。
基于django updown app
,我有以下代码用于upvotes$(document).ready(function() {
$("#custom-post-up").submit(function(event){
event.preventDefault();
$form=$('#custom-post-up');
var datastring = $form.serialize();
$.ajax({
type: "POST",
url: $form.attr('action'),
dataType: 'html',
data: datastring,
success: function(result)
{
$('#custom-post-message').html(result);
$('#custom-post-rating').load('/post/{{ id }}/rating/');
},
error: function(result)
{
$('#custom-post-message').html(result);
}
});
return false;
});
});
问题 - 错误消息未生成。如果我输入一个字符串,它工作正常。 例如:
error: function(result)
{
$('#custom-post-message').html("error");
}
此外,成功消息也可以正常工作。
我想要获取的错误消息来自updown app中的视图:
def authentication_required_response(self, request, context):
response = HttpResponse('You must be logged in to vote.')
response.status_code = 403
return response
此视图中的成功消息正常工作:
def rating_changed_response(self, request, context):
response = HttpResponse('Vote changed.')
return response
谢谢!
答案 0 :(得分:2)
使用AJAX应该记住两件事:
您似乎正在通过变量result
发送字典。您通过以下方式收到AJAX响应:
... ... ...
success: function(result)
{
$('#custom-post-message').html(result);
$('#custom-post-rating').load('/post/{{ id }}/rating/');
},
... ... ...
你正在做$('#custom-post-message').html(result);
,但结果是字典:
result = { readyState=4, responseText="You must be logged in to vote.", status=403, more...}
您需要使用以下密钥进行访问:
result['responseText']
result['readyState']
result['status']
这意味着当您将响应发送到AJAX函数时,您可以传递一个字符串。您需要将解析后的响应发送给JSON。
在我的Django项目中,我使用JSON函数来解析(json.dump(variable)
)和json.loads(variable)
以解析