使用jQuery表单插件提交Django表单时出现问题
使用jQuery表单插件提交表单时,目标视图接收到的请求与以标准方式提交表单时接收到的请求不同(没有javascript),并且我的Django模板没有按预期呈现。 以标准方式提交时,模板会呈现表单错误(“表单。[field_name].errors”),而通过javascript提交时则不会。 使用JavaScriptSubmit,我如何获得一个允许呈现模板的请求,就像使用标准submit一样? 两种情况下接收的请求对象之间的代码和差异如下所示 谢谢 七月 javascript代码:使用jQuery表单插件提交Django表单时出现问题,jquery,django,forms,request,submit,Jquery,Django,Forms,Request,Submit,使用jQuery表单插件提交表单时,目标视图接收到的请求与以标准方式提交表单时接收到的请求不同(没有javascript),并且我的Django模板没有按预期呈现。 以标准方式提交时,模板会呈现表单错误(“表单。[field_name].errors”),而通过javascript提交时则不会。 使用JavaScriptSubmit,我如何获得一个允许呈现模板的请求,就像使用标准submit一样? 两种情况下接收的请求对象之间的代码和差异如下所示 谢谢 七月 javascript代码: var
var is_geocoded = false;
var interval;
$(function(){
$("#submit").click(function() {
var options = {
beforeSubmit: getPosition, // pre-submit callback
success: showResponse // post-submit callback
};
// bind form using 'ajaxForm'
$('#addresto').ajaxForm(options);
});
});
function getPosition() {
var geocoder = new GClientGeocoder();
var country = $("#id_country").val();
var city = $("#id_city").val();
var postal_code = $("#id_postal_code").val();
var street_number = $("#id_street_number").val();
var street = $("#id_street").val();
var address = street_number+", "+street+", "+postal_code+", "+city+", "+country;
geocoder.getLatLng( address, function(point) {
if (point) {
$("#id_latitude").val(point.lat())
$("#id_longitude").val(point.lng())
is_geocoded = true;
} else {
is_geocoded = true;
}
});
interval = setInterval("doSubmit()", 500);
return false;
}
function doSubmit() {
if (is_geocoded) {
$("#addresto").ajaxSubmit();
clearInterval(interval);
}
}
Django模板代码:
<form id="addresto" action="" method="POST">
<p><label for="id_name">Name:</label>{{form.name.errors}} {{ form.name }} </p>
<p><label for="id_country">Country:</label>{{form.country.errors}} {{ form.country }} </p>
<!-- more stuff -->
<p style="clear: both;"><input type="Submit" id="submit" value="Submit" /></p>
</form>
名称:{{form.Name.errors}{{form.Name}}
国家:{{form.Country.errors}{{form.Country}}
以下是使用标准提交和javascript提交的视图接收到的请求之间的区别:
xxx@xxx:~$ diff javascript_submit standard_submit
7c7
< 'CONTENT_TYPE': 'application/x-www-form-urlencoded; charset=UTF-8',
---
> 'CONTENT_TYPE': 'application/x-www-form-urlencoded',
24c24
< 'HTTP_ACCEPT': '*/*',
---
> 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
28d27
< 'HTTP_CACHE_CONTROL': 'no-cache',
33d31
< 'HTTP_PRAGMA': 'no-cache',
36d33
< 'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest',
70c67
< 'wsgi.input': <socket._fileobject object at 0x891d064>,
---
> 'wsgi.input': <socket._fileobject object at 0x898b09c>,
xxx@xxx:~$diff javascript\u提交标准\u提交
7c7
<“内容类型”:“应用程序/x-www-form-urlencoded;字符集=UTF-8”,
---
>“内容类型”:“应用程序/x-www-form-urlencoded”,
24c24
<'HTTP_ACCEPT':'*/*',
---
>“HTTP_ACCEPT”:“text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8”,
28d27
<“HTTP\U缓存\U控制”:“无缓存”,
33d31
<'HTTP_PRAGMA':'no cache',
36d33
<'HTTP_X_REQUESTED_WITH':'XMLHttpRequest',
70c67
<'wsgi.input':,
---
>“wsgi.input”:,
通过ajax提交时不会出现错误的原因是您没有刷新页面
您需要将json或xml传递回javascript,并以这种方式将错误插入到页面中
您也可以将表单呈现为一团html并覆盖页面上的当前表单(但这有点复杂,效率不高)
基本上,我建议使用django的
request.is_ajax()
方法来确定表单是否使用ajax提交,并为ajax请求返回json通过ajax提交时不会出现错误的原因是您没有刷新页面
您需要将json或xml传递回javascript,并以这种方式将错误插入到页面中
您也可以将表单呈现为一团html并覆盖页面上的当前表单(但这有点复杂,效率不高)
基本上,我只需要使用django的
request.is_ajax()
方法来确定表单是否使用ajax提交,并为ajax请求返回json+1尽管我个人更喜欢为ajax请求提供不同的URL名称空间,可能只是将json
放在路径的某个地方。感谢您提供的提示。因为这里我并不真正需要ajax,所以我只使用javascript,这样我就不需要了'不必更改我的视图。+1尽管我个人更喜欢为ajax请求提供不同的URL名称空间,可能只需将json
放在路径的某个位置即可。感谢您提供的提示。因为这里我并不真正需要ajax,所以我只需使用javascript,这样就不必更改视图。