Вызов jquery ajax дает мне ошибку 405 (метод запрещен :) - PullRequest
1 голос
/ 06 августа 2020

У меня вопрос

Вызов jquery ajax дает мне ошибку 405 (метод запрещен :) Сообщение об ошибке не сообщает мне, почему. Сам запрос кажется причиной проблемы. если вы знаете, в чем проблема для этой проблемы, спасибо, дайте мне знать ~!

ajax

$('body').on('click', '.skill_search_button', function (e) {
    e.preventDefault();
    window.history.pushState("", "", '/wm/myshortcut/')
    const search_word = $(".skill_input_box").val();
    console.log("search_word : " + search_word);

    $("input:radio.search").each(function () {
        if (jQuery(this).is(":checked")) {
            search_option = this.id;
        } else {
            // alert("check")
        }
    });
    $.ajax({
        type: "POST",
        url: 'search_by_id_and_word/',
        data: {
            'search_word': search_word,
            'search_option': search_option,
            'page_user': "{{page_user}}",
            csrfmiddlewaretoken: '{{ csrf_token }}'
            },
        success: function (result) {
            window.history.pushState("", "", '/wm/myshortcut/')
            $("#wm_list_area_for_popup").html("")
            $("#wm_list_area_for_popup").append(result)
        }
    });
});

url

    path('myshortcut/search_by_id_and_word/' , views.searchSkilNoteViewByIdAndWord.as_view(), name="search_by_id_and_word"),

view

class searchSkilNoteViewByIdAndWord(ListView):
    model = MyShortCut
    paginate_by = 10
    template_name = 'wm/MyShortCut_list_for_search.html'

    def get_queryset(self):
        if request.method == "POST" and request.is_ajax():
            search_user_id = request.user
            search_word = request.POST['search_word']
            search_option = request.POST['search_option']
            print("search_user_id : ", search_user_id)
            print("search_word : ", search_word)
            print("search_option : ", search_option)
            user = User.objects.get(username=search_user_id)
            qs = MyShortCut.objects.filter(Q(author = user)).filter(Q(title__icontains=search_word) | Q(content1__icontains=search_word) | Q(content2__icontains=search_word)).order_by('-category')
            return qs
        else:
            qs = MyShortCut.objects.filter(Q(author = user)).filter(Q(title__icontains=search_word) | Q(content1__icontains=search_word) | Q(content2__icontains=search_word)).order_by('-category')
            return qs

Ответы [ 2 ]

3 голосов
/ 06 августа 2020

На стороне сервера вам следует позаботиться о том, какая модель будет приемлемой, в этом случае я думаю, что модели разные, или метод VERB на обеих сторонах должен быть одинаковым:

client      server
 POST        POST
1 голос
/ 06 августа 2020

Вам необходимо изменить тег шаблона:

с

csrfmiddlewaretoken: '{{ csrf_token }}'

на

csrfmiddlewaretoken : $("input[name=csrfmiddlewaretoken]").val()

Также включите {% csrf_token %} в свой шаблон

Дополнительная информация о подделке межсайтовых запросов в [Django -Docs]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...