我无法解决此“ parsererror” ajax错误

时间:2019-08-21 10:23:47

标签: javascript django ajax

我目前正在用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!")

2 个答案:

答案 0 :(得分:1)

您收到的意外令牌来自您的python脚本。

  

JSON在位置0处出现意外令牌

因此,位置token上的0a,并且不是有效的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',来完成。