Разница между jquery ajax post и axios post

#javascript #vue.js

#javascript #vue.js

Вопрос:

Я пишу новое приложение, используя Vue.js В рамках этого мне нужно получить токен API от третьей стороны. Приведенный ниже вызов ajax работает и возвращает ожидаемый объект данных ответа, однако вызов axios не проходит проверку и возвращает сообщение об ошибке «Имя пользователя и пароль не могут быть пустыми». Есть какие-нибудь идеи, что я делаю не так и почему эти два вызова обрабатываются по-разному?

     <script>
    $(function(){
        $.ajax(
            {
                type: "POST",
                url: "https://testapi.XXXXXXXX.com/auth",
                data: {
                        username:'TestUser',
                        password: 'TestPwd'
                    },
                success: function(res){
                    console.log("from jquery",res);
                }
            }
        )
    })
    </script>

   <script>
    var app = new Vue({
        el:"#vueapp",
        data:{
            api_key: null
        },
        methods:{
            getNewKey(){
                axios({
                    method: 'POST',
                    url:'https://testapi.XXXXXXXX.com/auth'
                    ,headers:{
                        'Content-Type':'application/x-www-form-urlencoded'
                    }
                    ,data:{
                        username:'TestUser',
                        password: 'TestPwd'
                    }
                })
                .then(response =>{
                    console.log("From Axios",response);
                })
            }
        },
        created(){
            this.getNewKey();
        }
    })
    </script>
  

Комментарии:

1. Вы можете проверить детали http-запросов в своем любимом веб-браузере, используя встроенные инструменты разработчика

2. $.ajax форма кодирует данные по умолчанию, axios — нет.

Ответ №1:

Из документации axios:

https://github.com/axios/axios#using-applicationx-www-form-urlencoded-format

Вам нужно JSON.stringify вашего объекта, переданного в data .

 data: JSON.stringify({username:'TestUser', password: 'TestPwd'})