0

ページをリロードせずにフォームを保存するようにフォームボタンを設定しようとしています。

すべてが正しく見えます。しかし、私は何かが欠けていると思います。ここに私のコードがあります:

ajax部分:

$('#submit').click(function() {

        var title = $('#id_title').val();
        var body = $('#id_body').val();
        var isdraft = $('#id_isdraft').is(':checked');

        var ajaxOptions = {
            type: 'post',
            url: '/admin/post/save/',
            data: {
                'title': title,
                'body': body,
                'isdraft': isdraft
            },
            success: function(){
                alert("save success");
             },
            error: function(){
                alert("fail");
             }
           };

        $.ajax(ajaxOptions);
});

ビュー部分:

@require_POST
def save_post(request):
     title = request.POST['title']
     body = request.POST['body']
     isdraft = request.POST['isdraft']
     owner = request.user 

     post = Post(title=title, body=body, isdraft=isdraft, owner=owner)
     post.save()

     return HttpResponse(200)

URL 部分:

url(r'^admin/post/save/', view='save_post', name='save_post'),

送信ボタンをクリックしたとき; ajax エラー関数が呼び出されました。

ありがとうございました

編集:

ファイアフォックスで; データをdbに保存します。エラーが表示されますが、再度保存します。

しかし、コンソールでは [runserver lines] ; エラーがあります:

Exception happened during processing of request from ('10.10.10.1', 42526)
Traceback (most recent call last):
  File "/usr/lib/python2.6/SocketServer.py", line 560, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/lib/python2.6/SocketServer.py", line 322, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/opt/sosyate_/sosyate_env/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 139, in __init__
    super(WSGIRequestHandler, self).__init__(*args, **kwargs)
  File "/usr/lib/python2.6/SocketServer.py", line 618, in __init__
    self.finish()
  File "/usr/lib/python2.6/SocketServer.py", line 661, in finish
    self.wfile.flush()
  File "/usr/lib/python2.6/socket.py", line 297, in flush
    self._sock.sendall(buffer(data, write_offset, buffer_size))
error: [Errno 32] Broken pipe

しかしクロムで。このようなエラーはありません。ajax関数で定義したエラーをスローするだけです。

4

1 に答える 1

0

デコレータがajaxリクエストでうまく機能していないことがわかりました。それを削除して、メソッド内にチェックを入れることをお勧めします

def save_post(request):
    if request.method == 'POST':
         title = request.POST['title']
         body = request.POST['body']
         isdraft = request.POST['isdraft']
         owner = request.user 

         post = Post(title=title, body=body, isdraft=isdraft, owner=owner)
         post.save()

         return HttpResponse(200)
于 2012-11-26T16:42:49.680 に答える