Uncaught RangeError: превышен максимальный размер стека вызовов в buildParams

Не могу найти где ошибка. пожалуйста помоги

Когда я отправляю форму, я получаю ошибку ниже в консоли

 Uncaught RangeError: Maximum call stack size exceeded     at buildParams

Я видел разные ответы, но они не помогли мне найти ошибку

JQuery

<script type="text/javascript">
    var frm = $('#message-form');
    frm.on('submit',function(e){
            e.preventDefault();
            $.ajax({
                type: frm.attr("method"),
                url: "message/message_form/",
                dataType: 'json', 
                data: { csrfmiddlewaretoken: "{{ csrf_token }}", frm:frm},
            })
            .done(function(response){
             console.log(response.message)
            });
        });
</script>

HTML

<div class="fixed-bottom">
    <form id="message-form"  user_id="{{u.id}}" method="POST">
        <input type="hidden" id="user_id" name="user_id" value="{{u.id}}">
        {% csrf_token %}
        <div class="container">
            <div class="row">
                <div id="text" class="col-10">
                    {{ msgform.text }}
                </div>

                <div class="col-1">
                    <button id="submit" class="btn"  type="submit"><img height="30px" src="/static/img/send-button.png" alt="send"></button>
                </div>
            </div>
        </div><br>
    </form>  
</div>

Спасибо в продвинутом


person Amar Rokade    schedule 12.06.2020    source источник
comment
Что должен делать frm:frm? Вы пытаетесь отправить полную форму (завернутую в объект jQuery)...   -  person Andreas    schedule 12.06.2020
comment
Возможный обман: $(this).serialize() — Как добавить значение?   -  person Andreas    schedule 12.06.2020
comment
Извините, если это очень просто. Я очень новичок в javascript. Я делаю переменную, чтобы я мог получить доступ из бэкэнда... если я ошибаюсь. .   -  person Amar Rokade    schedule 12.06.2020
comment
@Andreas, когда я пытаюсь frm:frm.serialize() вместо frm:frm, я получаю эту ошибку TypeError: 'method' object is not subscriptable   -  person Amar Rokade    schedule 12.06.2020


Ответы (1)


проблема с отправкой данных.

Когда я использую JSON.stringify для публикации данных и принимаю в представлениях как json.loads(request.POST.get('frm')), все работает нормально

$('#messageform').on('submit', function(e) {
  e.preventDefault();
  var frm = {
    'user_id': $('#user_id').attr('value'),
    'text': $('#form_message').val()
  };
  frm = JSON.stringify(frm);
  
  $.ajax({
    type: 'POST',
    url: "message/message_form/",
    dataType: 'json',
    data: {
      csrfmiddlewaretoken: "{{ csrf_token }}",
      'frm': frm
    },
  })
});

просмотры.py

def post(self, request):
        dictionary = json.loads(request.POST.get('frm'))
        print('=================',dictionary)
        u = get_object_or_404(User,pk=dictionary['user_id'])
        msg = message.objects.filter(sender=request.user).filter(receiver=u).all() | message.objects.filter(sender=u).filter(receiver=request.user).all()
        u = message.objects.create(sender=request.user,receiver=u,text=dictionary['text'])
        #if request.user != u and u.objects.filter(receiver__sender=request.user,receiver__receiver=u,receiver__read=False).exists :
        #    notify.send(request.user, recipient=u, verb="message you please read in message box",public=False)
        # msg = message.objects.filter(sender=request.user).filter(receiver=u).all() | message.objects.filter(sender=u).filter(receiver=request.user).all() 
        msg = dictionary['text']
        data = { "message":msg}
        return HttpResponse(json.dumps(data), content_type='application/json')
       
person Amar Rokade    schedule 13.06.2020
comment
Ваш ответ устраняет проблему просто потому, что вы добавили вызов метода val() в объект jQuery #form_message. Вам не нужно ничего вручную JSON.stringify(). - person Rory McCrossan; 19.05.2021