How to call a Django view function Asynchronously (AJAX) using Vue











up vote
0
down vote

favorite












I have a form with a button other then submit button. I would like Vue to call a Django view asynchronously when that button is clicked and return a JSON message saying function was called successfully.










share|improve this question






















  • OK. So what is your question? Did you try googling "vue ajax"?
    – Daniel Roseman
    Nov 8 at 9:24















up vote
0
down vote

favorite












I have a form with a button other then submit button. I would like Vue to call a Django view asynchronously when that button is clicked and return a JSON message saying function was called successfully.










share|improve this question






















  • OK. So what is your question? Did you try googling "vue ajax"?
    – Daniel Roseman
    Nov 8 at 9:24













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I have a form with a button other then submit button. I would like Vue to call a Django view asynchronously when that button is clicked and return a JSON message saying function was called successfully.










share|improve this question













I have a form with a button other then submit button. I would like Vue to call a Django view asynchronously when that button is clicked and return a JSON message saying function was called successfully.







ajax django vue.js vuejs2 django-views






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 8 at 6:32









Aseem

653618




653618












  • OK. So what is your question? Did you try googling "vue ajax"?
    – Daniel Roseman
    Nov 8 at 9:24


















  • OK. So what is your question? Did you try googling "vue ajax"?
    – Daniel Roseman
    Nov 8 at 9:24
















OK. So what is your question? Did you try googling "vue ajax"?
– Daniel Roseman
Nov 8 at 9:24




OK. So what is your question? Did you try googling "vue ajax"?
– Daniel Roseman
Nov 8 at 9:24












2 Answers
2






active

oldest

votes

















up vote
0
down vote













There are 4 different ways of doing Ajax with Vue as described in this ARTICLE.



I dont fully understand it. Following is how you would do it using Jquery.



Javascript code :



$("#id1").blur(function() { //when field with id="id1" loses focus, Ajax happens
var email_entered = $(this).val();
$.ajax({
url: 'ajax/signup_email_verification/',
type: "POST", //needs csrf token
data: { email: email_entered,csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val(), },
dataType: 'json',

success: function (data) {
alert("Ajax successful");
},
error: function(error){
alert("Ajax error");
},
});
});


Django code:



def email_verification(request):
email=request.POST.get('email'); print('AJAX EMAIL = ',email)
data={ 'success':True }
return JsonResponse (data)


HERE are few preferred ways to do Ajax with plain JS or Jquery or Fetch or Axios.






share|improve this answer




























    up vote
    0
    down vote













    Jquery and Vue dont work well together. Vue works inside Jquery but Jquery doesnt work inside Vue. Better option is to use Axios for Ajax.
    Call axios inside Vue method.



    axios.defaults.xsrfCookieName = 'csrftoken' //need this for method:post
    axios.defaults.xsrfHeaderName = 'X-CSRFToken' //need this for method:post

    var vue_app = new Vue({
    el: '#id_xyz',
    data: {
    vue_var1:'hello',
    vue_var2:,

    },
    methods:{
    ajax_method_name1:function(){
    console.log('Vue ajax_method_name1 is called');

    axios({
    method: 'post',
    url: 'ajax/url1/',//your customer url that is set in backend to do Ajax work
    data: {
    axios_var1: this.vue_var1, //data to send to server

    },
    responseType: 'json', //server will response with this datatype
    })

    .then ( function (response){ //success function
    console.log('axios ajax success. data returned ==' + response.data); //if returned data format is like {[ {'id':1,'id':2} ]} we may have to do response.data['output_dict'][0]['id']
    this.vue_var2 = response.data['output_var'];
    }.bind(this)) //bind(this) is required when accessing Vue variable inside Axios success function (.then)

    .catch ( function (error){ //error function
    console.log('Axios ajax error');
    });

    },
    },

    delimiters: ["[[","]]"],
    });





    share|improve this answer





















      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53202544%2fhow-to-call-a-django-view-function-asynchronously-ajax-using-vue%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes








      up vote
      0
      down vote













      There are 4 different ways of doing Ajax with Vue as described in this ARTICLE.



      I dont fully understand it. Following is how you would do it using Jquery.



      Javascript code :



      $("#id1").blur(function() { //when field with id="id1" loses focus, Ajax happens
      var email_entered = $(this).val();
      $.ajax({
      url: 'ajax/signup_email_verification/',
      type: "POST", //needs csrf token
      data: { email: email_entered,csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val(), },
      dataType: 'json',

      success: function (data) {
      alert("Ajax successful");
      },
      error: function(error){
      alert("Ajax error");
      },
      });
      });


      Django code:



      def email_verification(request):
      email=request.POST.get('email'); print('AJAX EMAIL = ',email)
      data={ 'success':True }
      return JsonResponse (data)


      HERE are few preferred ways to do Ajax with plain JS or Jquery or Fetch or Axios.






      share|improve this answer

























        up vote
        0
        down vote













        There are 4 different ways of doing Ajax with Vue as described in this ARTICLE.



        I dont fully understand it. Following is how you would do it using Jquery.



        Javascript code :



        $("#id1").blur(function() { //when field with id="id1" loses focus, Ajax happens
        var email_entered = $(this).val();
        $.ajax({
        url: 'ajax/signup_email_verification/',
        type: "POST", //needs csrf token
        data: { email: email_entered,csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val(), },
        dataType: 'json',

        success: function (data) {
        alert("Ajax successful");
        },
        error: function(error){
        alert("Ajax error");
        },
        });
        });


        Django code:



        def email_verification(request):
        email=request.POST.get('email'); print('AJAX EMAIL = ',email)
        data={ 'success':True }
        return JsonResponse (data)


        HERE are few preferred ways to do Ajax with plain JS or Jquery or Fetch or Axios.






        share|improve this answer























          up vote
          0
          down vote










          up vote
          0
          down vote









          There are 4 different ways of doing Ajax with Vue as described in this ARTICLE.



          I dont fully understand it. Following is how you would do it using Jquery.



          Javascript code :



          $("#id1").blur(function() { //when field with id="id1" loses focus, Ajax happens
          var email_entered = $(this).val();
          $.ajax({
          url: 'ajax/signup_email_verification/',
          type: "POST", //needs csrf token
          data: { email: email_entered,csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val(), },
          dataType: 'json',

          success: function (data) {
          alert("Ajax successful");
          },
          error: function(error){
          alert("Ajax error");
          },
          });
          });


          Django code:



          def email_verification(request):
          email=request.POST.get('email'); print('AJAX EMAIL = ',email)
          data={ 'success':True }
          return JsonResponse (data)


          HERE are few preferred ways to do Ajax with plain JS or Jquery or Fetch or Axios.






          share|improve this answer












          There are 4 different ways of doing Ajax with Vue as described in this ARTICLE.



          I dont fully understand it. Following is how you would do it using Jquery.



          Javascript code :



          $("#id1").blur(function() { //when field with id="id1" loses focus, Ajax happens
          var email_entered = $(this).val();
          $.ajax({
          url: 'ajax/signup_email_verification/',
          type: "POST", //needs csrf token
          data: { email: email_entered,csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val(), },
          dataType: 'json',

          success: function (data) {
          alert("Ajax successful");
          },
          error: function(error){
          alert("Ajax error");
          },
          });
          });


          Django code:



          def email_verification(request):
          email=request.POST.get('email'); print('AJAX EMAIL = ',email)
          data={ 'success':True }
          return JsonResponse (data)


          HERE are few preferred ways to do Ajax with plain JS or Jquery or Fetch or Axios.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 13 at 3:18









          Aseem

          653618




          653618
























              up vote
              0
              down vote













              Jquery and Vue dont work well together. Vue works inside Jquery but Jquery doesnt work inside Vue. Better option is to use Axios for Ajax.
              Call axios inside Vue method.



              axios.defaults.xsrfCookieName = 'csrftoken' //need this for method:post
              axios.defaults.xsrfHeaderName = 'X-CSRFToken' //need this for method:post

              var vue_app = new Vue({
              el: '#id_xyz',
              data: {
              vue_var1:'hello',
              vue_var2:,

              },
              methods:{
              ajax_method_name1:function(){
              console.log('Vue ajax_method_name1 is called');

              axios({
              method: 'post',
              url: 'ajax/url1/',//your customer url that is set in backend to do Ajax work
              data: {
              axios_var1: this.vue_var1, //data to send to server

              },
              responseType: 'json', //server will response with this datatype
              })

              .then ( function (response){ //success function
              console.log('axios ajax success. data returned ==' + response.data); //if returned data format is like {[ {'id':1,'id':2} ]} we may have to do response.data['output_dict'][0]['id']
              this.vue_var2 = response.data['output_var'];
              }.bind(this)) //bind(this) is required when accessing Vue variable inside Axios success function (.then)

              .catch ( function (error){ //error function
              console.log('Axios ajax error');
              });

              },
              },

              delimiters: ["[[","]]"],
              });





              share|improve this answer

























                up vote
                0
                down vote













                Jquery and Vue dont work well together. Vue works inside Jquery but Jquery doesnt work inside Vue. Better option is to use Axios for Ajax.
                Call axios inside Vue method.



                axios.defaults.xsrfCookieName = 'csrftoken' //need this for method:post
                axios.defaults.xsrfHeaderName = 'X-CSRFToken' //need this for method:post

                var vue_app = new Vue({
                el: '#id_xyz',
                data: {
                vue_var1:'hello',
                vue_var2:,

                },
                methods:{
                ajax_method_name1:function(){
                console.log('Vue ajax_method_name1 is called');

                axios({
                method: 'post',
                url: 'ajax/url1/',//your customer url that is set in backend to do Ajax work
                data: {
                axios_var1: this.vue_var1, //data to send to server

                },
                responseType: 'json', //server will response with this datatype
                })

                .then ( function (response){ //success function
                console.log('axios ajax success. data returned ==' + response.data); //if returned data format is like {[ {'id':1,'id':2} ]} we may have to do response.data['output_dict'][0]['id']
                this.vue_var2 = response.data['output_var'];
                }.bind(this)) //bind(this) is required when accessing Vue variable inside Axios success function (.then)

                .catch ( function (error){ //error function
                console.log('Axios ajax error');
                });

                },
                },

                delimiters: ["[[","]]"],
                });





                share|improve this answer























                  up vote
                  0
                  down vote










                  up vote
                  0
                  down vote









                  Jquery and Vue dont work well together. Vue works inside Jquery but Jquery doesnt work inside Vue. Better option is to use Axios for Ajax.
                  Call axios inside Vue method.



                  axios.defaults.xsrfCookieName = 'csrftoken' //need this for method:post
                  axios.defaults.xsrfHeaderName = 'X-CSRFToken' //need this for method:post

                  var vue_app = new Vue({
                  el: '#id_xyz',
                  data: {
                  vue_var1:'hello',
                  vue_var2:,

                  },
                  methods:{
                  ajax_method_name1:function(){
                  console.log('Vue ajax_method_name1 is called');

                  axios({
                  method: 'post',
                  url: 'ajax/url1/',//your customer url that is set in backend to do Ajax work
                  data: {
                  axios_var1: this.vue_var1, //data to send to server

                  },
                  responseType: 'json', //server will response with this datatype
                  })

                  .then ( function (response){ //success function
                  console.log('axios ajax success. data returned ==' + response.data); //if returned data format is like {[ {'id':1,'id':2} ]} we may have to do response.data['output_dict'][0]['id']
                  this.vue_var2 = response.data['output_var'];
                  }.bind(this)) //bind(this) is required when accessing Vue variable inside Axios success function (.then)

                  .catch ( function (error){ //error function
                  console.log('Axios ajax error');
                  });

                  },
                  },

                  delimiters: ["[[","]]"],
                  });





                  share|improve this answer












                  Jquery and Vue dont work well together. Vue works inside Jquery but Jquery doesnt work inside Vue. Better option is to use Axios for Ajax.
                  Call axios inside Vue method.



                  axios.defaults.xsrfCookieName = 'csrftoken' //need this for method:post
                  axios.defaults.xsrfHeaderName = 'X-CSRFToken' //need this for method:post

                  var vue_app = new Vue({
                  el: '#id_xyz',
                  data: {
                  vue_var1:'hello',
                  vue_var2:,

                  },
                  methods:{
                  ajax_method_name1:function(){
                  console.log('Vue ajax_method_name1 is called');

                  axios({
                  method: 'post',
                  url: 'ajax/url1/',//your customer url that is set in backend to do Ajax work
                  data: {
                  axios_var1: this.vue_var1, //data to send to server

                  },
                  responseType: 'json', //server will response with this datatype
                  })

                  .then ( function (response){ //success function
                  console.log('axios ajax success. data returned ==' + response.data); //if returned data format is like {[ {'id':1,'id':2} ]} we may have to do response.data['output_dict'][0]['id']
                  this.vue_var2 = response.data['output_var'];
                  }.bind(this)) //bind(this) is required when accessing Vue variable inside Axios success function (.then)

                  .catch ( function (error){ //error function
                  console.log('Axios ajax error');
                  });

                  },
                  },

                  delimiters: ["[[","]]"],
                  });






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 27 at 23:12









                  Aseem

                  653618




                  653618






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.





                      Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                      Please pay close attention to the following guidance:


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53202544%2fhow-to-call-a-django-view-function-asynchronously-ajax-using-vue%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      這個網誌中的熱門文章

                      Academy of Television Arts & Sciences

                      L'Équipe

                      1995 France bombings