【问题标题】:Django - AJAX Request returns 500 INTERNAL SERVER ERRORDjango - AJAX 请求返回 500 INTERNAL SERVER ERROR
【发布时间】:2015-09-15 11:33:19
【问题描述】:

我正在尝试通过使用 ajax 函数来更新它来简单地更新布尔表单值,因为我为什么要它重新加载,但无论如何,我已经检查过我正在传递 csrf_token,并确保这不是问题。我认为这是我的 urls.py 的问题,但我不确定它到底是什么。

我可以做些什么来修复这个错误?

这是我的 ajax 表单的 views.py,注意:project_complete 是我模型中的布尔字段

@login_required
def ProjectDetailToDoCForm(request):
    form = ProjectToDoCForm(request.POST or None)
    if form.is_valid() and request.is_ajax():
        args = {}
        args.update(csrf(request))
        ajaxVal = request.POST.get('booleanValue')
        args['doneBool'] = ajaxVal.project_complete
        return HttpResponse(json.dumps(args), content_type="application/json")

javascript

<script type="text/javascript">
    $(document).on("submit", "#project_edit_date", function(e){
        e.preventDefault();
        updateForm();
    });

    function updateForm() {

        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 = jQuery.trim(cookies[i]);
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }  

        $.ajaxSetup({
            beforeSend: function(xhr, settings) {
                if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
                    // Only send the token to relative URLs i.e. locally.
                    xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
                }
            }
        });

        $.ajax({
            url: "{% url 'projects:todoc_form' %}",
            type: "POST",
            datatype: "json",
            data: {booleanValue : $("#id_project_complete").val()},

            "beforeSend": function(xhr, settings) {
                console.log("Before Send");
                $.ajaxSettings.beforeSend(xhr, settings);
            },

            success: function(json){
              console.log(json);
              console.log("success");
            },

            error:function(xhr,errmsg,err){
                console.log(err);
            }
        });
    }
</script>

表格

<form action="" method="post" id="project_edit_date">{% csrf_token %}
   <label for="todoc">Task Done?</label>
   <span name="todoc" id="check_done">   {{todocform.project_complete}}</span>
   <button type="submit" id="project_edit_button">
        <span>Update</span>
   </button>
</form>   

urls.py

urlpatterns = patterns('',
    url(r'^$', views.ProjectView.as_view() , name='project'),
    url(r'^create/$', views.createproject, name='create'),
    url(r'^edit/(?P<slug>[\w-]+)/$', views.ProjectDetail.as_view(), name='indproject'),
    url(r'^view/(?P<slug>[\w-]+)/$', views.ProjectDetailPublic.as_view(), name='pproject'),
    url(r'^form/(?P<slug>[\w-]+)/$', require_POST(ProjectDetailForm.as_view()), name='indproject_form'),
    url(r'^update/(?P<slug>[\w-]+)/$', require_POST(ProjectDetailToDoForm.as_view()), name='todo_form'),
    url(r'^complete/$', ProjectDetailToDoCForm, name='todoc_form'),
)

【问题讨论】:

  • 您需要从控制台或开发者工具发布回溯。
  • 问题出在服务器端(几乎总是出现 500 个错误)。看看这个:args['doneBool'] = ajaxVal.project_complete 其中ajaxVal = request.POST.get('booleanValue') 可能是一个字符串,即它极不可能有.project_complete 属性。这就是引发异常的原因。

标签: javascript jquery python ajax django


【解决方案1】:

只是一个一般提示,因为您已经发布了所有代码,包括 HTML / JS / Python / urls.py ...

  • 如果您的 JS 中有错误(客户端错误),您会在浏览器日志(控制台)中看到它。
  • 如果 urls.py 中有错误,您很可能会收到 HTTP Response 404 Not Found,这意味着无法解析 URL。
  • 如果您收到 HTTP 响应 500 内部服务器错误,这肯定意味着您遇到了服务器错误(python 代码 /views.py/ 中的运行时错误。

通常阅读最常见的响应代码以及它们在此处的含义HTTP/1.1: Status Code Definitions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 2013-01-08
    • 2016-05-30
    • 2017-02-20
    • 2023-03-30
    • 2022-12-08
    • 2019-03-20
    相关资源
    最近更新 更多