首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery POST到Django重定向到无数据的GET

jQuery POST到Django重定向到无数据的GET
EN

Stack Overflow用户
提问于 2013-11-06 03:44:57
回答 1查看 184关注 0票数 0

在提交表单之前,我需要将表单数据发布到Django视图。我尝试的所有方法都会在同一点上失败。进行ajax调用的javascript是:

代码语言:javascript
复制
$('#lockdown-email-form input[type=text]').focusout(function() {
    var data = $('#lockdown-email-form form').serialize()    
    $.post("/lockdown-email", data)
})

接收调用的python是:

代码语言:javascript
复制
def lockdown_email(request):
    msg = ''
    logger.info(request.method)
    if request.method == 'POST':
        form = LockdownEmailForm(request.POST)
        if form.is_valid():
            email_content = "Email:\n" + form.cleaned_data['email']
            mail_admins('Email for preview submission', email_content)
            msg = 'Thank you! Entering site.'
        else:
            msg = 'Email required'
    return HttpResponse(msg)

问题是,每次发出请求时,都会重定向到相同的URL,但使用GET方法(通过查看dev tools的网络选项卡),因此该函数不起作用。我已经搜索了很长一段时间;一些关于CSRF的建议,但我在settings.py中禁用了它,它仍然不起作用。

这是在django-lockdown页面上的,尽管这个特定的例子并没有与lockdown交互。有什么想法吗?

编辑:

urls.py

代码语言:javascript
复制
from django.conf.urls import patterns, url
from django.views.generic import TemplateView

from app import views

urlpatterns = patterns('',
    url(r'^robots.txt$', TemplateView.as_view(template_name="app/robots.txt")),
    url(r'^$', views.index, name='index'),
    url(r'lockdown-email$', views.lockdown_email, name='lockdown_email'),
    url(r'get-locations$', views.get_locations, name='get_locations'),
    url(r'amend-data$', views.amend_data, name='amend_data'),
    url(r'feedback$', views.feedback, name='feedback'),
    url(r'contest-data$', views.contest_data, name='contest_data'),
)
EN

回答 1

Stack Overflow用户

发布于 2013-11-06 05:10:44

好吧,我有一个暂时的,相当令人不满意的解决方案。

出于某些我还不明白的原因(但很可能与django-lockdown有关),在第一次发出ajax POST请求时,它会重定向到GET,但第二次它的行为就像预期的那样。因此,我的解决方案是简单地将我的js更改为如下所示:

代码语言:javascript
复制
$('#lockdown-email-form input[type=text]').focusout(function() {
    var data = "email=" + $('#lockdown-email-form input[type=text]').val()

    $.ajax({
        url: '/lockdown-email',
        type: 'POST',
        async: false,
        data: data,
    })
    $.ajax({
        url: '/lockdown-email',
        type: 'POST',
        async: false,
        data: data,
    })

})

使用ajax而不是post来确保同步请求。不过,我会寻找一个更好的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19797521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档