student101
student101

Reputation: 522

POST request not behaving as intended

I've been trying to get my button to send a POST request to the submitted URL, which does a write back to the database. The application looks like the POST request gets sent, but after hitting the button my URL never changes and the print at the submitted URL appears to be an empty set.

This is my jquery/ajax call for the button:

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>


<button class="btn btn-primary my_select" type="submit">Request Access</button>
              <script>
              $(document).ready(function () {
                  $('form').on('submit', function (e) {
                      e.preventDefault();
                      var phi = $('#phi').val();
                      var accesslevelid = $('#accesslevelid').val();
                      $.ajax({
                          url: "{% url 'submitted' %}",
                          headers: { 'X-CSRFToken': '{{ csrf_token }}' },
                          data: {
                              phi: phi,
                              accesslevelid: accesslevelid,
                            },
                          type: 'POST',
                          success: function (result) {
                              // do something with result
                            },
                        });
                    });
                });
              </script>

I'm expecting my POST of the Application List, PHI flag, and Access Level gets sent as a POST to my submitted URL. My view for submitted is the following:

 def submitted(request):
    owner = User.objects.get (formattedusername=request.user.formattedusername)
    checkedlist = request.POST.getlist('report_id')

    coid = User.objects.filter(coid = request.user.coid).filter(formattedusername=request.user.formattedusername)
    facilitycfo =  QvDatareducecfo.objects.filter(dr_code__exact = coid, active = 1, cfo_type = 1).values_list('cfo_ntname', flat = True)
    divisioncfo =  QvDatareducecfo.objects.filter(dr_code__exact = coid, active = 1, cfo_type = 2).values_list('cfo_ntname', flat = True)

    print (f"checkedlist prior to post:{checkedlist}")

    selectedaccesslevel = request.POST.get('accesslevelid')


    selectedphi = request.POST.get('phi')



    if request.method == 'POST':
        for i in checkedlist:
            requestsave = QVFormAccessRequest(ntname = owner.formattedusername, first_name = owner.first_name, last_name = owner.last_name, coid = owner.coid, facility = owner.facility, title = owner.title
                                      ,report_id = i, accesslevel_id = selectedaccesslevel, phi = selectedphi , access_beg_date = '2017-01-01 00:00:00', access_end_date = '2017-01-31 00:00:00')
            requestsave.save()
            print (f"postlist:{checkedlist}")
            print (f"accesslevel:{selectedaccesslevel}")
            print (f"phi:{selectedphi}")


    return JsonResponse({'is_success':True})

My post looks like it occurs when I press my button:

[] [12/Dec/2017 08:54:45] "POST /account/submitted/ HTTP/1.1" 200 1149

However, the URL doesn't switch to submitted. My list for checkedlist appears to be an empty set. When visiting submitted and having my print statements occur, i get nothing like the POST never occurred.

My form action is the following:

<form action = "{% url 'submitted' %}" form method = "POST">
  {% csrf_token %}
    {{ form.as_p}}

Upvotes: 0

Views: 104

Answers (1)

Naqib Hakimi
Naqib Hakimi

Reputation: 912

ajax is build to do background client server operation or load part of the page dynamic to avaid heavy requests

Example

most of social medias feeds use ajax. when you scroll the view a ajax request is send to server to retrieve the next feed .

in your case the data is posted to server successfully. but change the URL is not available by server at this point but you can do this with a trick ... in your view.py file

from django.http import JsonResponse

if request.method == 'POST':
        for i in checkedlist:
            requestsave = QVFormAccessRequest(ntname = owner.formattedusername, first_name = owner.first_name, last_name = owner.last_name, coid = owner.coid, facility = owner.facility, title = owner.title
                                      ,report_id = i, accesslevel_id = selectedaccesslevel, phi = selectedphi , access_beg_date = '2017-01-01 00:00:00', access_end_date = '2017-01-31 00:00:00')
            requestsave.save()
            print (checkedlist)
            print(selectedaccesslevel)
            print(selectedphi)
        return JsonResponse({'is_sucess':True})

this JsonResponse object will send back the data ajax.

success: function (result) {
    if(result.is_sucess){
        document.location = 'you url to direct page at' //
      }
},

this job can be done using direct post to url and then redirecting to other url i. will leave this for now

Upvotes: 2

Related Questions