未捕获到的SyntaxError:JSON中位置2处的意外令牌a

时间:2019-12-12 06:14:49

标签: python json django

几个小时以来,我一直在疯狂尝试使用import cloneDeep from 'lodash/cloneDeep' static transformBoardBasicInfo (rawBoard:any): any { const clonedBoard: any = cloneDeep(rawBoard) as any clonedBoard.info = this.getInfo(rawBoard) return clonedBoard } 从外部获取和显示json数据,但是在下面出现此错误

JSON.parse

到目前为止,这是我的代码和工作量。有人可以帮助我解决此问题。我会感激的。

tacker.html

 VM935:1 Uncaught SyntaxError: Unexpected token a in JSON at position 2
    at JSON.parse (<anonymous>)
    at Object.<anonymous> ((index):698)
    at fire (jquery-3.3.1.js:3268)
    at Object.fireWith [as resolveWith] (jquery-3.3.1.js:3398)
    at done (jquery-3.3.1.js:9305)
    at XMLHttpRequest.<anonymous> (jquery-3.3.1.js:9548)

models.py

{% load static %}
{% block title %}
Shop - Tracker
{% endblock %}
{% block content %}
<section>
    <center>
        <div class="container">
            <div class="row">
                <div class="col-md-6 p-b-30">
                    <form class="leave-comment" method="POST" id="trackerForm" action="#">
                        {% csrf_token %}
                        <h4 class="m-text26 p-b-36 p-t-15">
                            Track Your order
                        </h4>
                        <div class="bo4 of-hidden size15 m-b-20">
                            <input class="sizefull s-text7 p-l-22 p-r-22" id="orderId" type="text" name="orderId" placeholder="Order Id" required>
                        </div>
                        <div class="bo4 of-hidden size15 m-b-20">
                            <input class="sizefull s-text7 p-l-22 p-r-22" id="email" type="email" name="email" placeholder="Email Address" required>
                        </div>
                        <div class="w-size25">
                            <!-- Button -->
                            <button class="flex-c-m size2 bg1 bo-rad-23 hov1 m-text3 trans-0-4">
                                Track your Order
                            </button>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </center>
    <div class="container1">
        <div class="row">
            <div class="col-md-6 p-b-30">
                <h4 class="m-text26 p-b-36 p-t-15">
                    Track order
                </h4>
                <ul class="list-group" id="track">
                </ul>
            </div>
        </div>
    </div>
    <div class="container1">
        <div class="row">
            <div class="col-md-6 p-b-30">
                <h4 class="m-text26 p-b-36 p-t-15">
                    Your order Details
                </h4>
                <ul class="list-group" id="citem">
                </ul>
            </div>
        </div>
    </div>
</section>

{% endblock %}

{% block js %}
<script>
$('#trackerForm').submit(function(event) {
    $('#track').empty();
    var formData = {
        'orderId': $('input[name=orderId]').val(),
        'email': $('input[name=email]').val(),
        'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val()
    };
    $.ajax({
            type: 'POST',
            url: '/shop/tracker/',
            data: formData,
            encode: true
        })
        .done(function(data) {
            console.log(data);
            data = JSON.parse(data);
            updates = data[0];
            if (updates.length > 0 & updates != {}) {

                for (i = 0; i < updates.length; i++) {
                    let text = updates[i]['text'];
                    let time = updates[i]['time'];
                    mystr = '<li class="list-group-item"> ${text} <span class="badge"> ${time} </span></li>'
                    $('#track').append(mystr);

                }
            } else {
                mystr = 'sorry'
                $('#track').append(mystr);
            }
            //fill in the order Details
            cart = JSON.parse(data[1]);
            console.log(cart);
            for (item in cart) {
                let name = cart[item][1];
                let qty = cart[item][0];
                mystr = '<li class="list-group-item">${name}<span class="badge">${qty}</span></li>'
                $('#citem').append(mystr);
            }


        });
    event.preventDefault();
});
</script>
{% endblock %}

views.py


class Order(models.Model):
    order_id = models.AutoField(primary_key=True)
    items_json = models.CharField(max_length=5000)
    name = models.CharField(max_length=90)
    email = models.CharField(max_length=111)
    address = models.CharField(max_length=111)
    city = models.CharField(max_length=111)
    state = models.CharField(max_length=111)
    zip_code = models.CharField(max_length=111)
    phone = models.CharField(max_length=111, default="")

    def __str__(self,):
        return self.name


class OrderUpdate(models.Model):
    update_id  = models.AutoField(primary_key=True)
    order_id = models.IntegerField(default="")
    update_desc = models.CharField(max_length=5000)
    timestamp = models.DateField(auto_now_add=True)

    def __str__(self):
        return self.update_desc[0:7] + "..."

1 个答案:

答案 0 :(得分:2)

tracker()不返回JSON。执行时返回

return HttpResponse(f"{orderId} and {email}")

并且永远不会执行在response中创建JSON并执行的代码

return HttpResponse(response)

摆脱第一return行。

也是

response = json.dumps([updates, order[0].item_json], default=str)

应该在for循环之后,而不是在内部。