Django - is_ajax()没有返回true

时间:2014-05-30 13:18:12

标签: jquery python ajax django

我知道已经有很多问题要问这个但是我无法解决这个问题。请看一下:

当"更新"时,从个人资料视图

按下按钮我希望用一个可编辑的表单显示用户,并从数据库中选择值。截至目前,没有POST数据。

模板:

<form id="shw-form" action="/update_user_profile/{{r_user.id}}" method="get" enctype="multipart/form-data">
<button type="submit" id="upd-btn"  class="btn btn-lg btn-warning" onclick="update_profile_page();">UPDATE</button>
</form>

jquery的:

<script type="text/javascript">
    function update_profile_page() {


            var form = $("#shw-form");
            $("#upd-btn").attr('disable', 'true');
            $.ajax({
                url: form.action,
                type: 'get',
                success: function(response){
                    $("#upd-main").load(response); 
                }
                });

            return false;

    }
   </script> 

urls.py

url(r'^update_user_profile/(?P<user_id>\d+)$', 'myapp.views.update_user_profile', name='update_user_profile')

但是当我点击按钮时,is_ajax()的else部分就会被执行。

如果您能找到我做错了或遗失的任何内容,请查看。感谢。

3 个答案:

答案 0 :(得分:2)

is_ajax()检查X-REQUESTED-WITH标题。通常jQuery会正确设置它。您可以尝试在$.ajax中明确设置此标头:

$.ajax({
   url: form.action,
   type: 'get',
   success: function(response){
      $("#upd-main").load(response); 
   },
   headers: {
     'X-Requested-With': 'XMLHttpRequest'
   }
});

如果这不起作用,则表示您的服务器或代理会剥离此标题。

答案 1 :(得分:0)

您没有禁用该按钮的默认操作,因此该表单已由浏览器提交。

由于您已经在HTML onclick中明确地放置了JS函数,您可以这样做:

<button ... onclick="update_profile_page();return false;"

答案 2 :(得分:0)

不要使用按钮的onclick属性,它可能无法捕获所有内容。使用jQuery的submit()事件处理程序(http://api.jquery.com/submit/)代替。如果您在控制台中没有看到任何请求,那么Daniel很可能是正确的:表单以通常的方式提交。 / p>