【问题标题】:Ajax request type POST returning GETAjax 请求类型 POST 返回 GET
【发布时间】:2015-01-05 05:50:49
【问题描述】:

我目前正在尝试发出 ajax POST 请求,以将推荐简单表单发送到 Django 视图。问题是这个请求返回的是 GET 而不是 POST。

这是我的 ajax:

<script>

$(document).ready(function(){
  $("form.testimonial-form").submit(function(e){
    e.preventDefault();

    var dataString = $(this).serialize();

    $.ajax({
      type: "POST",
      url: "/testimonials",
      data: dataString,
      success: function(_data) {        
        if (_data[0]){
          $('.modal-text').css({display: "none"});
        }
        else{
          $('.unsuccess').css({display: "block"});
        }
       }
    });
  });
});
</script>

知道我做错了什么吗?

【问题讨论】:

    标签: ajax django post


    【解决方案1】:

    type 替换为method

    method: 'post',
    

    您可能还需要发送headers:

    headers: {
        'X-CSRFToken': getCSRFToken()
    },
    

    getCSRFToken 在哪里:

    function getCSRFToken() {
        return $('input[name="csrfmiddlewaretoken"]').val();
    }
    

    【讨论】:

    【解决方案2】:

    我不太确定为什么会这样,但我会以不同的方式编写函数。因为ajax(); 的默认type"GET",我怀疑它在某处被设置为默认值。

    首先设置提交按钮的type="button"(其id是例如"submit_button_id"),所以如果你点击它就不会提交。或者把按钮放在&lt;form&gt;之外

    然后试试这段代码

    <script>
    $(function(){ // same as "$(document).ready(function()".. 
      $("#submit_button_id").on('click',function(){
    
      var dataString = $('form.testimonial-form').serialize();
    
      $.ajax({
        type: "POST",
        url: "/testimonials",
        data: dataString,
        success: function(_data) {        
          if (_data[0]){
            $('.modal-text').css({display: "none"});
          }
          else{
            $('.unsuccess').css({display: "block"});
          }
         }
       });
      });
    });
    </script>
    

    【讨论】:

    • 它没有用...一旦我在我的推荐视图上执行“print request.is_ajax()”,我得到“True”,我也执行“print request.method”,我得到“GET”。
    猜你喜欢
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多