Передача данных POSTed через Ajax в Django в HTML - PullRequest
0 голосов
/ 12 октября 2019

У меня есть форма, которую я отправил через Ajax и хотел бы передать обработанные данные в тот же HTML для ввода данных.

Не уверен, что это правильно, я отправил данные на URL /cat_select и планирую получить значение, обработанное в Python, по тому же URL-адресу, но у меня возникают проблемы с возвратом данных.

Ниже приведена функция POST

def cat_select(request):
    cat_result=[]
    cat_selected=[]
    cat_name=['l2','l3']
    cat_selected=list(map(lambda x:request.POST.get(x, '').split(','), cat_name))
    cat_result=c_result(["US"],cat_selected) #list of tuples I want to get 
    print(cat_selected)
    print(cat_result)
    return JsonResponse({'cat':cat_result},safe=False)

Когда я открываю /cat_select для cat_result, я получаю пустой список вместо того, что напечатано в консоли Python. Как я могу получить доступ к обработанным значениям?

Я хочу иметь cat_result на веб-странице. Я хотел бы обработать данные после отправки формы и затем вернуться, но браузер, похоже, GET данные до POST с кодом ниже.

<form id="cat_select">{% csrf_token %} 
<input class="site" name="site" type="text">
<input class="l2" name="l2" id="l2" type="text" style="width:30%">
<input class="l3" name="l3" id="l3" type="text" style="width:50%">
<br>
<button class="btn btn-outline-success my-2 my-sm-0" type="submit" id="cat_submit">Submit</button>
</form>
<script type="text/javascript">
$(document).on('submit','#cat_select',function(e){
    e.preventDefault();
    $.ajax({
        type:'POST',
        url:'/cat_select',
        data:{
            l2:$('#l2').val(),
            l3:$('#l3').val(),
            csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val()
        },
        success: function(){
            alert ("selected!")
        }
    });
      $.ajax({
                method:'GET',
                url:'/cat_select',
                success:function(data){
                    console.log(data);
                    alert ("Data back!")
                },
                error:function(data){
                    console.log('Error!');
                }
            });
});
</script>

Если для обработанных данных необходимо использовать второй URL, как я могу это сделать в FBV? Спасибо.

( ОБНОВЛЕНИЕ Я не использую форму django, поскольку входные данные обернуты в selectize.js. Есть ли другой способ, кроме форм django?)

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Доступ к данным можно получить через успешный обратный вызов вашего POST-запроса ajax:

success: function(response, status, XHR){
        var data = JSON.parse(response);
        console.log(data);
        console.log(data.cat);
    }

Для пояснения, я думаю, вы пытаетесь получить доступ к данным из вашего второго ajax-запроса, но не можетеДелайте это, потому что http-запросы не имеют состояния , что означает, что каждый запрос ничего не знает о предыдущих запросах, а все переменные, определенные в предыдущих запросах, забываются в новых запросах.

TLDR;вам не нужен второй вызов ajax.

0 голосов
/ 12 октября 2019

Из вашего кода я понял, что вы пытаетесь создать форму с полями и кнопку отправки. Но я, честно говоря, не знаю, почему вы не использовали формы Django, поскольку они очень просты и понятны Формы Django

Вам не нужно делать то, что вы делаете. Если вы не делаете что-то еще, в чем вы можете объяснить больше, чтобы мы могли помочь

Я сделал то, что вы сделали, только когда мне нужно было отправить более одного запроса на одну и ту же страницу, на которой мне нужно было обновитьпеременная каждый раз, когда пользователь делает что-то мое, было, когда пользователь останавливает публикацию видео текущей секунды видео, в котором я обработал другой сценарий, но сценарий, который отправляет мне необходимые данные

///function that POSTS the remining time andd video id
function PostVideoData() {
    var newinput =     document.getElementById("remtime").value;
var video_id = document.getElementById("video_id").value;
if (newinput != input) {
    input = newinput;

}
var saveData = $.ajax({
    type: "POST",
    url:   "lectures/video/",
    data: {"value": input,   "video_id" : video_id},
  dataType: "text",
  success: function(resultData){

  }
});


}

И я простоназываемая функцией

Для вашего типа проблемы используйте формы, просто ищите формы Django, и вы найдете достаточно информации, чтобы решить вашу проблему. Также посетите этот вопрос

создание форм Django

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