Python 将JSON发送到Django模板
我有一个非常基本的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
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 )
}
)