Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Django JsonResponse不返回任何数据_Jquery_Ajax_Django - Fatal编程技术网

Jquery Django JsonResponse不返回任何数据

Jquery Django JsonResponse不返回任何数据,jquery,ajax,django,Jquery,Ajax,Django,我正在子类化DjangoUpdateView以使用AJAX表单(基于Django 1.11和jQuery-3.2.1)更新我的模型 我想更改UpdateView以返回JSON数据(而不是HttpResponseRedirect()或使用render\u to\u response()再次呈现表单) 下面是我的更新视图的子类: class MediaSetUpdateView(UpdateView): def form_valid(self, form): self.obj

我正在子类化DjangoUpdateView以使用AJAX表单(基于Django 1.11和jQuery-3.2.1)更新我的模型

我想更改UpdateView以返回JSON数据(而不是HttpResponseRedirect()或使用render\u to\u response()再次呈现表单)

下面是我的更新视图的子类:

class MediaSetUpdateView(UpdateView):
    def form_valid(self, form):
        self.object = form.save()
        print("Data is saved", file=sys.stderr)
        return JsonResponse({'message' : 'Data is saved'}, status=204)

    def form_invalid(self, form):
        print("form invalid", file=sys.stderr)
        return JsonResponse(form.errors.as_json(), status=422)
以下是我的更新视图的URL设置:

urlpatterns = [
    ...,
    url(r'^mediaset/(?P<pk>[0-9]+)/$', views.MediaSetUpdateView.as_view(), name='mediaset_update'),
    ...,
]
django UpdateView返回success(“数据已保存”在我的django控制台中打印),但没有返回任何消息(AJAX success()中的console.log(Data)返回“undefined”)

从我的浏览器进一步调查表明,Django没有返回任何消息,除了HTTP成功状态。以下是我的chrome调试器的捕获:

HTTP/1.0 204 No Content
Date: Wed, 19 Jul 2017 09:28:09 GMT
Server: WSGIServer/0.2 CPython/3.5.2
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Content-Length: 28

知道如何调试JsonResponse中丢失的数据吗

基于Daniel Roseman,下面是我在Django视图中将状态/错误消息发送到AJAX表单的代码

class MediaSetUpdateView(UpdateView):
    def form_valid(self, form):
        self.object = form.save()
        #print("Data is saved", file=sys.stderr)
        return JsonResponse({'message' : 'Data is saved'}, status=200)

    def form_invalid(self, form):
        #print("form invalid", file=sys.stderr)
        return HttpResponse(form.errors.as_json(), status = 400, content_type='application/json')
那么jQuery AJAX是:

$.ajax({
    url: ajax_url,
    type: 'put', // Performing a PUT request
    data : json_storage,
    dataType: 'json',         
    success: function(data) {
        console.log(data);
        $('#id_save_dialog_message').remove();
        $('#id_save_dialog .modal-dialog .modal-content .modal-body').prepend(
            '<div id="id_save_dialog_message" class="alert alert-success">' + data['message'] + '</div>');

    },
    error: function(data) {
        console.log(data);

        errors = $.parseJSON(data.responseText);
        error_msg = '';

        $.each(errors, function (key, data) {
            $.each(data, function (key_array, data) {
                error_msg += '<div class="row"><div class="col-md-4">'+ key + 
                            '(' + data['code'] + ')</div><div class="col-md-8">' 
                            + data['message'] + '</div></div>';
            });
        });

        $('#id_save_dialog_message').remove();
        $('#id_save_dialog .modal-dialog .modal-content .modal-body').prepend(
            '<div id="id_save_dialog_message" class="alert alert-danger">' + error_msg + '</div>');
    }
});
$.ajax({
url:ajax\uURL,
键入:“put”,//执行put请求
数据:json_存储,
数据类型:“json”,
成功:功能(数据){
控制台日志(数据);
$(“#id#save_dialog_message”).remove();
$('#id_save_dialog.modal dialog.modal content.modal body')。前缀(
''+数据['message']+'';
},
错误:函数(数据){
控制台日志(数据);
errors=$.parseJSON(data.responseText);
错误消息=“”;
$。每个(错误、功能(键、数据){
$.each(数据、函数(键数组、数据){
错误消息+=''+键+
“(”+数据['code']+')”
+数据['message']+'';
});
});
$(“#id#save_dialog_message”).remove();
$('#id_save_dialog.modal dialog.modal content.modal body')。前缀(
''+错误消息+'';
}
});

请注意,需要添加“jQuery.ajaxSettings.traditional=true”才能访问上述成功数据。

如消息所述,204表示“无内容”。你为什么要用那种身份?为什么不是200(确定)或201(创建)?还要注意,请求使用特定ID更新内容的正确HTTP动词是PUT,而不是POST。最后,如果您这样做,您应该真正研究django rest框架,而不是攻击django自己的视图。有什么原因您甚至不想使用普通的基于函数的视图吗?非常感谢。我从某处复制并粘贴了它,从未意识到HTTP 204意味着“成功,没有返回数据”
$.ajax({
    url: ajax_url,
    type: 'put', // Performing a PUT request
    data : json_storage,
    dataType: 'json',         
    success: function(data) {
        console.log(data);
        $('#id_save_dialog_message').remove();
        $('#id_save_dialog .modal-dialog .modal-content .modal-body').prepend(
            '<div id="id_save_dialog_message" class="alert alert-success">' + data['message'] + '</div>');

    },
    error: function(data) {
        console.log(data);

        errors = $.parseJSON(data.responseText);
        error_msg = '';

        $.each(errors, function (key, data) {
            $.each(data, function (key_array, data) {
                error_msg += '<div class="row"><div class="col-md-4">'+ key + 
                            '(' + data['code'] + ')</div><div class="col-md-8">' 
                            + data['message'] + '</div></div>';
            });
        });

        $('#id_save_dialog_message').remove();
        $('#id_save_dialog .modal-dialog .modal-content .modal-body').prepend(
            '<div id="id_save_dialog_message" class="alert alert-danger">' + error_msg + '</div>');
    }
});