【发布时间】:2015-08-22 01:00:42
【问题描述】:
我正在尝试构建一个使用 ajax 接受输入的网络应用程序。输入在服务器端发送到 Django,我很难让 url 正确重定向。我知道目前的问题与 django 翻译应用程序有关。
这是相关部分。
Ajax
$(document).ready(function(){
$('#applicant_form').on('submit', function(event){
event.preventDefault() //this will stop the file from submitting the form manually.
$.ajax({
url :'/save_applicant/', // the endpoint
type : "POST", // http method
data : { the_post : "Yay" }, // data sent with the post request
dataType: "json",
// handle a successful response
success : function(json) {
console.log("success"); // another sanity check
},
// handle a non-successful response
error : function(xhr,errmsg,err) {
$('#results').html("<div class='alert-box alert radius' data-alert>Oops! We have encountered an error: "+errmsg+
" <a href='#' class='close'>×</a></div>"); // add the error to the dom
console.log(xhr.status + ": " + xhr.responseText); // provide a bit more info about the error to the console
}
});
});
});
HTML/DJANGO 模板
<form method = "POST" action = "" class="form bgform" id="applicant_form">
{% csrf_token %}
{{ applicant_form|crispy }}
<input class="btn btn-default" type="submit" name="Save" />
</form>
views.py
def save_applicant(request):
if request.method =='POST':
id = None
if 'applicant' in request.session:
id = request.session['applicant']
applicant_form = ApplicantForm(request.POST)
if applicant_form.is_valid():
session_applicant = applicant_form.save(commit=False)
if id:
session_applicant.id = id
else:
session_applicant.save()
request.session['applicant'] = session_applicant.id
return HttpResponse(json.dumps({'status':'applicant_saved'}), content_type='application/json')
else:
return HttpResponse(applicant_form.errors.as_json(),content_type='application/json')
else:
return HttpResponse(json.dumps({'status':'not_post'}),content_type='application/json')
urls.py
from django.conf.urls import include, url
from django.contrib import admin
from django.conf.urls.i18n import i18n_patterns
urlpatterns = [
]
urlpatterns += i18n_patterns(
url(r'^$', 'plan_b_profile.views.home', name='home'),
url(r'^save_applicant/','plan_b_profile.views.save_applicant',name='save_applicant'),
url(r'^admin/', include(admin.site.urls)),
)
命令行
[21/Aug/2015 20:53:43]"POST /save_applicant HTTP/1.1" 302 0
[21/Aug/2015 20:53:43]"GET /en/save_applicant/ HTTP/1.1" 200 22 <---- HOW TO FIX THIS
再次感谢!
【问题讨论】:
-
这是整个视图吗?
-
你想做什么?
-
嘿,我添加了完整视图,抱歉,我不确定它是否相关。我只是想使用 ajax POST 到 /save_applicant/。虽然我有翻译,而不是像往常一样发布到 url,它更改为 GET 调用并添加 /en/save_applicant/ 。不知道如何解决这个问题,所以这个重定向不会发生。
-
它正在执行
GET,因为您正在提交表单而不是使用$.preventDefault()。我假设页面在点击提交后重新加载? -
我添加了事件默认值(见上文),当我点击提交按钮时页面不会重新加载,而是转到我的视图。视图发现它不是 POST,因为它现在是 GET,然后我在控制台上看到:'status':'not post'