在观点中:
return render_to_response("main.html", RequestContext(request, {'form':form, "result":result}))
在模板中我有这个jquery函数:
$('#submitButton').click(function(e) {
e.preventDefault();
var dataPosted = $("#mainSubmit").serialize();
$.ajax({
type: "POST",
data: dataPosted,
url: 'main/',
success: function(data) {
$("#mainDiv").html(data);
$(".response").html({{ result }});
$(".response").show();
}
});
});
});
<div id="mainDiv" class="part">
<form id="mainSubmit" action="main/" method="POST" name="submitForm">
{% csrf_token %}
{{ form.non_field_errors }}
{{ form.as_p }}
<input type="submit" value="Submit" id="submitButton"/>
<div class="response" style="display: none;"></div>
</form>
</div>
但似乎数据不能像这样分配给响应div(似乎数据没有定义)。所以我不知道将数据发送到模板的方式是什么。如果我在视图中使用Httpresponse(result)
,那么我不能刷新我的表单,只有我可以在视图中发送的响应div数据中显示。那是什么方式?
编辑: 这是我的看法。之前,如果form.is_valid():我没有为条件设置其他,但是我在这里使用,因为我认为如果我不这样做,它可能会导致一些可能性。我不知道什么是最好的方式。
def mainFunc(request):
if request.is_ajax():
if request.method == 'POST':
form = mainForm(request.POST)
if form.is_valid():
// process the form
result = "successful"
to_json = {'form':form, 'result':result}
return HttpResponse(json.dumps(to_json), mimetype='application/json')
else:
result = ""
to_json = {'form':form, 'result':result}
return HttpResponse(json.dumps(to_json), mimetype='application/json')
else:
form = mainForm()
return render_to_response('main.html', RequestContext(request, {'form':form}))
else:
return render_to_response("ajax.html", {}, context_instance=RequestContext(request))
答案 0 :(得分:2)
您需要以JSON
等格式返回响应您可以使用this snippet或更简单的代码:
from django.utils import simplejson
to_json = {'form':form, "result":result}
return HttpResponse(simplejson.dumps(to_json), mimetype='application/json')
然后,您就可以在JS代码中使用data.result
和data.form
。
如果您对ajax和非ajax调用使用相同的视图,则可以使用request.is_ajax()
此外,您将无法在JS回调中使用模板标记和过滤器。因此,您需要在通过JSON发送表单之前预呈现表单
所以最后的代码:
to_json = {'form':form, "result":result}
if request.is_ajax():
to_json['form'] = to_json['form'].as_p()
return HttpResponse(simplejson.dumps(to_json), mimetype='application/json')
else:
render_to_response("main.html", RequestContext(request, {'form':form, "result":result}))
修改我认为ajax.html
是整个页面的模板,main.html
是页面mainDiv
部分的模板
因此,在is_ajax()
部分视图中,您可以返回这样的数据。
to_json = {}
to_json['form'] = render_to_string('main.html', {'form': form}, context_instance=RequestContext(request))
to_json['result'] = result
return HttpResponse(json.dumps(to_json), mimetype='application/json')
你总是会返回这样的数据,包括GET和POST AJAX调用
在JS中你会得到这样的数据:
$("#mainDiv").html(data.form);
$(".response").html(data.result);
$(".response").show();