4

jquery1.7.1とdjango1.3を使用して、Webで見つけたチュートリアルコードで、ajaxを介してPOSTリクエストを作成しようとしました。

$(document).ready(function(){
    $("#create").click(create_note);

});

var create_note = function() {
  var title = $("#title").val()
  var slug = $("#slug").val()
  if (title != "" && slug != "") {
    var data = { title:title, slug:slug };
    console.log('title='+title);
    console.log('slug='+slug);
    var args = { type:"POST", url:"/create/", data:data, complete:done };
    $.ajax(args);
  }
  else {
    // display failure
  }
  return false;
};

URL「/create/」はdjangoビューにマップされます

(r'^create/$','notes.views.create_note'),

def create_note(request):
    error_msg = u"No POST data sent."
    if request.method == "POST":
        post = request.POST.copy()
        if post.has_key('slug') and post.has_key('title'):
            slug = post['slug']
            if Note.objects.filter(slug=slug).count() > 0:
                error_msg = u"Slug already in use."
            else:
                title = post['title']
                new_note = Note.objects.create(title=title,slug=slug)
                return HttpResponseRedirect(new_note.get_absolute_url())
        else:
            error_msg = u"Insufficient POST data (need 'slug' and 'title'!)"
    return HttpResponseServerError(error_msg)

javascript関数をトリガーする送信ボタンをクリックするとcreate_note、403エラーが発生します。csrfの問題である必要があります。

レディ関数を変更してこれを解決しようとしました

$(document).ready(function(){
        $.ajaxSetup({
        data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
    });
        $("#create").click(create_note);

    });

しかし、それは機能しませんでした..私はまだ得ます403 error

ajaxだから、私は呼び出しでデータを変更しようとしました

var create_note = function() {
    var data = { title:title, slug:slug ,csrfmiddlewaretoken: '{{ csrf_token }}'};
    ...
    var args = { type:"POST", url:"/create/", data:data, complete:done };
    $.ajax(args);

};

それでも403エラーが発生します。

これを修正するために何をすべきか教えてください..これについての djangoドキュメントjQuery(document).ajaxSend(...を見ましたが、それを使用する方法がわかりません。コード全体をjavascriptファイルにコピーする必要があります。..ここで本当に混乱しています。 。

4

1 に答える 1

4

(リンク先のドキュメントが示唆するように)そのメソッド全体をコピーする必要がありますajaxSend...

いかなる方法でも変更する必要はありません。これは完全なソリューションです。ajaxSendメソッドは、実際にはイベントのイベント ハンドラーですajaxSend.ajaxjQueryでメソッドを使用するとトリガーされます。ajaxSend のドキュメントはこちら

上記のドキュメントにリンクされているメソッドは、正しいX-CSRFTokenヘッダーを AJAX リクエストに追加します。次に、最初の方法を使用して AJAX 要求を送信できます。

于 2012-05-12T09:26:30.203 に答える