500(内部服务器错误)AJAX Django



all!你能帮我吗?我有一个小问题。当我单击按钮时,当我单击按钮时,应该创建一个新对象而无需重新加载页面。创建对象只需要一个参数。

问题是当您单击对象时,将创建对象(新对象显示在管理面板中(,但在控制台js中出现错误: Failed to load resource: the server responded with a status of 500 (Internal Server Error)

.JS:

function initBuyButton(){
    $('.button-buy').click(function(e){
        e.preventDefault();
        var test = $(this);
        var smartphone_id = test.data("smartphone_id");
        var url = test.attr("action");
        basketUpdating(smartphone_id, url);
    });
}

function basketUpdating(smartphone_id, url){
    var data = {};
    var csrf_token = $('#form_buying_product [name="csrfmiddlewaretoken"]').val();
    data["csrfmiddlewaretoken"] = csrf_token;
    data.smartphone_id = smartphone_id;
    $.ajax({
        url: url,
        type: 'POST',
        data: data,
        cache: true,
    });
}

$(document).ready(function(){
    initBuyButton();
});

视图:

def basket_adding(request):
    """Add new smartphone to basket."""
    data = request.POST
    smartphone_id = data.get('smartphone_id')
    SmartphoneInBasket.objects.create(smartphone_id=smartphone_id)
    return True

.HTML:

<form id="form_buying_product" > {% csrf_token %}
  {% for sm in smartphones %}
 ...    
    <input type="submit" action="{% url 'basket_adding' %}" class="button-
     buy" data-smartphone_id = "{{ sm.id }}" value="Buy">
  {% endfor %}
</form>

如注释中所述,视图需要返回 HttpResponse。如果需要,它可以为 n 空:

return HttpResponse()
您需要

csrf token作为标头包含在内。

var csrftoken = $("[name=csrfmiddlewaretoken]").val();
$.ajax({
    url: url,
    type: 'POST',
    headers:{
        "X-CSRFToken": csrftoken
    },
    data: data,
    cache: true,
});

因为error 500您的发送数据的权限被拒绝。

我定义了以下辅助函数:

import json
def json_response(request, val, **kw):
    """Return a json or jsonp response.
    """
    if request.GET.get('callback'):
        return jsonp(request.GET['callback'], val, **kw)
    else:
        return jsonval(val, **kw)
def jsonval(val, **kw):
    """Serialize val to a json HTTP response.
    """
    data = dumps(val, **kw)
    resp = http.HttpResponse(data, content_type='application/json')
    resp['Content-Type'] = 'application/json; charset=UTF-8'
    return resp
def jsonp(callback, val, **kw):
    """Serialization with json callback.
    """
    data = callback + '(%s)' % json.dumps(val, **kw)
    return http.HttpResponse(
        data,
        content_type='application/javascript; charset=utf-8'
    )

定义这些后,您的视图可以返回一个 JSON 对象(到 AJAX 调用(:

def basket_adding(request):
    """Add new smartphone to basket."""
    ...
    return json_response(request, True)

不过,返回对象是常见的做法,所以也许:

    return json_response(request, {"status": True})

相关内容

  • 没有找到相关文章

最新更新