1

I can't find where is mistake. please help

When I submit form I get below error in console

 Uncaught RangeError: Maximum call stack size exceeded     at buildParams

I saw different answers but they didn't help me to find error

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>

Thanx in advanced

Amar Rokade
  • 25
  • 1
  • 10
  • 2
    What is `frm:frm` supposed to do? You're trying to submit a complete form (wrapped in a jQuery object)... – Andreas Jun 12 '20 at 11:38
  • Possible dupe: [$(this).serialize() — How to add a value?](https://stackoverflow.com/questions/6539502/this-serialize-how-to-add-a-value) – Andreas Jun 12 '20 at 11:40
  • Sorry if it is very basic. I am very new to `javascript`. I make variable so that I can access from in backend.. is I make any mistake. . – Amar Rokade Jun 12 '20 at 11:46
  • @Andreas when I try `frm:frm.serialize()` instead of `frm:frm` I get this error `TypeError: 'method' object is not subscriptable` – Amar Rokade Jun 12 '20 at 12:05

1 Answers1

1

the problem in sending data.

When I use JSON.stringify to post data and accept in views as json.loads(request.POST.get('frm')) everything works fine

$('#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
    },
  })
});

views.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')
       
Rory McCrossan
  • 331,213
  • 40
  • 305
  • 339
Amar Rokade
  • 25
  • 1
  • 10
  • Your answer fixes the problem simply because you added the `val()` method call to the `#form_message` jQuery object. You don't need to manually `JSON.stringify()` anything. – Rory McCrossan May 19 '21 at 08:00