2017-10-12 11 views
0

投稿にコメントを追加するフォームを作成していますが、ajaxはフォームデータをNoneとして送信するため、ajaxなしで動作しています。ajaxがdjangoと連携していません

AJAX:

<script> 
     $(function() { 
      $("#myform").on("submit", function(e) { 
       e.preventDefault(); 
       $.ajax({ 
        url: $(this).attr("action"), 
        type: 'POST', 
        data: $(this).serialize(), 
        beforeSend: function() { 
         $("#message").html("sending..."); 
        }, 
        success: function(data) { 
         confirm('worked') 
        } 
       }); 
      }); 
     }); 
</script> 

形態:

<form action="{% url 'newcom' Post.id%}" id="myform"> 
    <div class="input-group"> 
     <input type="text" name="comment_body" class="form-control" placeholder="Leave a comment"> 
     <div class="input-group-btn"> 
      <button class="btn btn-success" id="message" type="submit"> 
       <i class="glyphicon glyphicon-send"></i> 
      </button> 
     </div> 
    </div> 
    <br> 
</form> 

ビュー:

def new_comment(request, post_id): 
    body = request.GET.get('comment_body') 
    post = Post.objects.get(id=post_id) 
    Nat.objects.create(fromUser=request.user.username, toUser=post.created_by, content="commented on your post") 
    Comment.objects.create(post=post, created_by=request.user, 
          created_at=timezone.localtime(timezone.now()), comment=body) 
    return HttpResponseRedirect(request.META.get('HTTP_REFERER')) 
+1

POSTとして送信していますが、PythonコードではGETを使用しています。 ajaxでPOSTをGETに変更する必要があります。 –

+0

@MilanChhedaいいえ、POST-GETリクエストは全て冪等でなければならない。 –

答えて

1

<form>要素がGETを使用してリクエストを送信していて、サーバー側のコードではGETの値が必要です。ただし、AJAXリクエストではPOSTが使用されています。あなたは

type: 'GET' 

type: 'POST' 

からAJAX要求の種類を変更する必要があるかjQueryのデフォルトはGETを使用することであるとして、あなたは、完全にプロパティを省略することができます。

また、AJAXメソッドをそのまま使用して、Djangoコードを修正してPOST変数を受け取ることもできます。

+0

__must__は冪等でなければならず、ビューはコメントの送信に関するものなので、POSTを使用してすべてのことを行う必要があります。 –

+0

@brunodesthuilliers良い点 - 答えを更新してそのことに関するメモを追加する –

関連する問題