Python 将JSON发送到Django模板

Python 将JSON发送到Django模板,python,jquery,django,ajax,Python,Jquery,Django,Ajax,我有一个非常基本的Django视图,一旦它收到请求,就应该向用户正在访问的页面发送响应,这样我就可以在该页面上显示消息,而无需刷新页面 以下是我的看法: def Action(request): response = '' if request.method == 'POST': if request.POST.get('ajaxform', False) == 'submit': data = request.POST.get('form

我有一个非常基本的Django视图,一旦它收到请求,就应该向用户正在访问的页面发送响应,这样我就可以在该页面上显示消息,而无需刷新页面

以下是我的看法:

def Action(request):
    response = ''
    if request.method == 'POST':
        if request.POST.get('ajaxform', False) == 'submit':
            data = request.POST.get('formdata', False)
            mymodel = Userdata()
            mymodel.save()
            response = 'Submitted!'

    return HttpResponse(json.dumps(response), content_type='application/json')
基本上,当收到POST请求时,此视图应该向模板发送JSON响应,并显示消息
Submitted

当我浏览我的模板时,在我的开发工具上,我可以看到页面接收到JSON响应
Submitted
,但我不明白如何使用Jquery显示它

有人能告诉我如何创建一个Jquery函数,该函数只有在Django视图收到Json响应时才会触发吗

基本上,在这种情况下,当Django视图触发响应
Submitted
,我的Jquery函数应该接收该消息并对其执行一些操作

我试过这个:

$.ajax({
  url: "/mytemplate/Action",
  type: 'get',
  dataType: 'json',
  success: function (data) {
    console.log(data)
  }
});

但是,这个函数的问题是,我的控制台中没有打印任何内容,尽管我可以在“网络”选项卡上看到响应。

我的猜测是,由于您在字符串中调用json.dumps,jQuery也会收到一个字符串。也许可以尝试在视图中调用json.dumps({'response':'Submitted!')

一个更简单的解决方案可能是使用“.done”回调,该回调在post请求成功后触发。这样,您就不需要来自python视图的特定响应。这样,一个简单的HttpResponse('true')就可以工作了

有关.done回调的更多详细信息,请参见此处:

澄清后编辑

第一个问题在您的视图中。在这里,您指定了

if request.method == 'POST':
但是您的ajax请求使用的是GET方法

  type: 'get',
除此之外,您仍然发送字符串响应,而不是“字符串化”字典

我举了一个与你的帖子类似的工作示例。在国际海事组织,你的观点应该是:

def Action(request):
    response = ''
    if request.method == 'POST':
        if request.POST.get('ajaxform', False) == 'submit':
            data = request.POST.get('formdata', False)
            mymodel = Userdata()
            mymodel.save()
            response = 'Submitted!'

    return JsonResponse({'resp': response})
为了提出请求和处理回复,我写了一篇$.post,它更简洁

$.post("/mytemplate/Action", 
       params,
       function( data )
       {
           console.log(data )
       }
       )

我的猜测是,既然您在字符串中调用json.dumps,那么jQuery也会收到一个字符串。也许可以尝试在视图中调用json.dumps({'response':'Submitted!')

一个更简单的解决方案可能是使用“.done”回调,该回调在post请求成功后触发。这样,您就不需要来自python视图的特定响应。这样,一个简单的HttpResponse('true')就可以工作了

有关.done回调的更多详细信息,请参见此处:

澄清后编辑

第一个问题在您的视图中。在这里,您指定了

if request.method == 'POST':
但是您的ajax请求使用的是GET方法

  type: 'get',
除此之外,您仍然发送字符串响应,而不是“字符串化”字典

我举了一个与你的帖子类似的工作示例。在国际海事组织,你的观点应该是:

def Action(request):
    response = ''
    if request.method == 'POST':
        if request.POST.get('ajaxform', False) == 'submit':
            data = request.POST.get('formdata', False)
            mymodel = Userdata()
            mymodel.save()
            response = 'Submitted!'

    return JsonResponse({'resp': response})
为了提出请求和处理回复,我写了一篇$.post,它更简洁

$.post("/mytemplate/Action", 
       params,
       function( data )
       {
           console.log(data )
       }
       )