Django : Не пойманная (в promise) SyntaxError: Неожиданная лексема < в JSON в позиции 0

Ошибка при нажатии кнопки для отправки данных. Пожалуйста, помогите мне решить проблему. Ошибка при нажатии кнопки для отправки данных. Пожалуйста, помогите мне решить проблему. Ошибка при нажатии кнопки для отправки данных. Пожалуйста, помогите мне решить проблему.

detail.html

    td>
              <!-- <a href="{% url 'Detail_pem' %}"><button data-product="{{order.id}}" data-act="{{order.name}}" class="btn btn-warning id_order btntam" >Detail</button> </a> -->
              <button data-product="{{order.id}}" data-act="{{order.name}}" class="btn btn-warning id_order btntam" >Detail</button> 
            </td>
          </tr>
          {% endfor %}
        </tbody>
      </table>
</div>
<!-- <script type="text/JavaScript" src="{% static 'js/pem.js' %}"></script> -->

<script>
var id_order = document.getElementsByClassName('id_order')
for (i = 0; i < id_order.length; i++) {
  id_order[i].addEventListener('click', function(){
        var orid  = this.dataset.product
        var ornm  = this.dataset.act
        console.log('orid :', orid)
        console.log('ornm :', ornm)
        codata(orid, ornm)
    })
    
}
function codata(orid, ornm){
  console.log('orid :', orid, 'ornm :', ornm)
const url = "Detail"
fetch(url, {
        method :'POST',
        headers : {
            'Content-Type' : 'application/json',
            'X-CSRFToken'  :  csrftoken,
        },
        body:JSON.stringify({'orid':orid, 'ornm':ornm}),
    })
    .then((response) =>{
        return response.json();
    })
    .then((data) => {
      console.log('Success:', data);
                })
}
</script>
{% endblock %}

view.py

def Detail(request):
    data    = json.loads(request.body.decode("utf-8"))
    orid    = data['orid']
    ornm    = data['ornm']
    print('id :', orid,'nama :', ornm)
    context = {'orid ':orid , 'ornm':ornm}

    return render(request, 'store/detail.html', context )

Я собираюсь предположить, что маршрут представления Detail является URL, который fetched.

Ошибки

Unexpected token < in JSON почти всегда означают, что вы получили ответ HTML, но ожидали JSON. Вы пытаетесь декодировать ответ как JSON (return response.json();). Однако Detail возвращает HTML-ответ с render.

Я думаю, что вы хотите либо убрать попытку декодировать ответ как JSON в JavaScript, либо использовать JsonResponse вместо render.

JavaScript

<script>
var id_order = document.getElementsByClassName('id_order')
for (i = 0; i < id_order.length; i++) {
  id_order[i].addEventListener('click', function(){
        var orid  = this.dataset.product
        var ornm  = this.dataset.act
        console.log('orid :', orid)
        console.log('ornm :', ornm)
        data(orid, ornm)
    })
    
}
function data(orid, ornm){
  console.log('orid :', orid, 'ornm :', ornm)
const url = "Detail"
fetch(url, {
        method :'POST',
        headers : {
            'Content-Type' : 'application/json',
            'X-CSRFToken'  :  csrftoken,
        },
        body:JSON.stringify({'orid':orid, 'ornm':ornm}),
    })
        .then((response) => response.json())
                .then((data) => {
                    console.log('Success:', data);
                    window.location.href = "{% url 'Detail_pem' %}"

                })
}
</script>

view.py

def Detail_pem(request):
    data    = json.loads(request.body.decode("utf-8"))
    orid    = data['orid']
    ornm    = data['ornm']

    print('id :', orid, 'nama :', ornm)

    context = {'orid ':orid , 'ornm':ornm}
    return render(request, 'store/detail.html', context )
    
def Detail(request):
    data    = json.loads(request.body.decode("utf-8"))
    orid    = data['orid']
    ornm    = data['ornm']
    print('id :', orid,'nama :', ornm)

    return JsonResponse('Payment complete', safe=False)

Получаем такую ошибку JSONDecodeError в /Detail_pem Ожидаемое значение: строка 1 столбец 1 (char 0) введите описание изображения здесь

Я думаю, что проблема в том, что вы не возвращаете правильный JSON объект, вы возвращаете строку, возможно, попробуйте изменить:

Отсюда:

def Detail(request):
    data    = json.loads(request.body.decode("utf-8"))
    orid    = data['orid']
    ornm    = data['ornm']
    print('id :', orid,'nama :', ornm)

    return JsonResponse('Payment complete', safe=False)

на что-то вроде этого:

def Detail(request):
    data    = json.loads(request.body.decode("utf-8"))
    orid    = data['orid']
    ornm    = data['ornm']
    print('id :', orid,'nama :', ornm)

    return JsonResponse({'status':'Payment complete'}, safe=False)

Смотрите, например, документацию Django:

django json response

Вернуться на верх