我目前正在用jango做ajax。 但是,响应会引发错误。
我使用ajax向视图发送请求并创建模型。 现在我们可以开始创建了。 我认为返回视图存在问题。
我收到的错误消息
fail 200
(index):150 parsererror
(index):151 SyntaxError: Unexpected token a in JSON at position 0
at parse (<anonymous>)
at Ut (jquery-3.3.1.min.js:2)
at k (jquery-3.3.1.min.js:2)
at XMLHttpRequest.<anonymous> (jquery-3.3.1.min.js:2)
javascript代码(jquery)
$('form').on('submit', function(e){
let $submit_input = $(this).find('input')
let $data = $(this).data('group')
console.log($data);
e.preventDefault();
$.ajax({
'url': "{% url 'groups:ajax_post_add' %}",
'type': 'POST',
'data': {
'group': $data,
csrfmiddlewaretoken: '{{ csrf_token }}',
},
'dataType': 'json',
beforeSend: function(xhr, settings) {
$submit_input.attr('disabled', true);
}
}).then((...args) => { // done
const [data, textStatus, jqXHR] = args;
console.log('done', jqXHR.status);
})
.catch((...args) => { // fail
const [jqXHR, textStatus, errorThrown] = args;
console.log('fail', jqXHR.status);
console.log(textStatus);
console.log(errorThrown);
})
});
python代码
#views
@require_http_methods(["POST"])
def GroupRequestAdd(request):
group_id = request.POST.get('group')
group_id = group.objects.get(id=group_id)
request_add = belong.objects.create(user=request.user,group=group_id)
return HttpResponse("ajax is done!")
答案 0 :(得分:1)
您收到的意外令牌来自您的python脚本。
JSON在位置0处出现意外令牌
因此,位置token
上的0
是a
,并且不是有效的JSON。
查看代码,您会发现这是正确的,因为您返回了string
。
return HttpResponse("ajax is done!") // a is your unexpected token at position 0
dataType
中的$.ajax
属性向AJAX函数说明服务器响应中期望什么样的值。在这种情况下,您期望的是JSON
,但是会收到string
。因此$.ajax
函数尝试从JSON解析结果,但是失败。
将dataType: 'json'
更改为dataType: 'html'
或dataType: 'text'
,它将正确输出您的响应。
查看documentation of jQuery,了解如何使用dataType
属性。
答案 1 :(得分:1)
简而言之,您将从django视图返回一个字符串,该字符串不是有效的JSON字符串。因此您的JavaScript无法将其解析为“有效” json。
违规行是return HttpResponse("ajax is done!")
。而是将其更改为返回json。
return HttpResponse(json.dumps({'status': 'ajax is done!'}))
或者,修改您的jquery以处理html。这可以通过将行'dataType': 'json',
更改为'dataType': 'html',
来完成。