首页 > 解决方案 > Ajax: SyntaxError: Unexpected token < in JSON at position 2

问题描述

当用户单击复选框时,我正在尝试使用 ajax 更新我的数据库。

我收到以下错误消息

SyntaxError: Unexpected token < in JSON at position 2
parsererror

从我读到的内容来看,这是因为它得到的是 html 响应而不是 json 响应。但是它甚至没有执行我的post_form_api视图(它没有运行我的打印语句)所以我不知道它从哪里得到这个响应。

我没有使用表单,因为我没有看到需要,尽管我确实使用表单尝试过并且得到了同样的错误。

网址.py

path('/api/post_form/', post_form_api, name="post_form_api"),

javascript.js

/* get the csrftoken token */
function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = cookies[i].trim();
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = getCookie('csrftoken');

/* checkbox */
$("task_complete").click(function(){
    var csrfToken = $("input[name='csrfmiddlewaretoken']");
    var form_field1 = 'test'
    $.ajax({ url: "{% url 'post_form_api' %}",
        type: "POST",
        dataType: "json",
        data: {'form_field1':form_field1, 'csrfmiddlewaretoken':csrfToken.val()},
        cache: false,
            
        success : function(json) {
            if (json.result=== 'ok'){
                console.log('It works 1');
            }else{
                console.log('Something wrong with response');
            }},
       error : function(xhr,errmsg,err) {
           console.log(err);
           console.log(errmsg);
           //console.warn(xhr.responseText) if I uncomment this it prints a lot of html
       },

    }).done(function(data) {
        console.log("It works 2");
        if (data.result === true){
            console.log("It works 3");
            alert(data.message);
        }
    });
});

视图.py

def post_form_api(request):
    print("--view executed--")

模板

{% csrf_token %}
{% if task.completed == True %}
    <td><input id="task_{{ task.id }}" class="task_complete" type="checkbox" checked='checked'/></td>
{% else %}
    <td><input id="task_{{ task.id }}" class="task_complete" type="checkbox"/></td>
{% endif %}

谢谢

标签: djangoajax

解决方案


推荐阅读