0

I want to do AJAX Request with Axios in Laravel. I did npm install axios --save but i don't know how to use it. Please help me how can I use axios in my laravel project.

Here's my ajax-land.blade.php:

<div id="app">
    <ul>
        <li v-for = "skill in skills" v-text = "skill"></li>
    </ul>
</div>
<script src = "https://vuejs.org/js/vue.js"></script>
<script src = "/js/axisa.js"></script>

Here's my axisa.js:

 new Vue({
    el: '#app',
    data: {
        skills: []
    },
    mounted(){
        axios({
            method: 'get',
            url: '/links'
        })
        .then(response => this.skills = response.data)
    }
});

Here are my routes:

Route::get('/', function () {
    return view('ajax-land');
});

Route::get('/links', function(){
    return ['Google', 'Microsoft', 'Facebook', 'Twitter', 'LinkedIn'];
});

Here's the bootstrap.js:

window._ = require('lodash');

/**
 * We'll load jQuery and the Bootstrap jQuery plugin which provides support
 * for JavaScript based Bootstrap features such as modals and tabs. This
 * code may be modified to fit the specific needs of your application.
 */

try {
    window.$ = window.jQuery = require('jquery');

    require('bootstrap-sass');
} catch (e) {}

/**
 * We'll load the axios HTTP library which allows us to easily issue requests
 * to our Laravel back-end. This library automatically handles sending the
 * CSRF token as a header based on the value of the "XSRF" token cookie.
 */

window.axios = require('axios');

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

/**
 * Next we will register the CSRF Token as a common header with Axios so that
 * all outgoing HTTP requests automatically have it attached. This is just
 * a simple convenience so we don't have to attach every token manually.
 */

let token = document.head.querySelector('meta[name="csrf-token"]');

if (token) {
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
    console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}

/**
 * Echo exposes an expressive API for subscribing to channels and listening
 * for events that are broadcast by Laravel. Echo and event broadcasting
 * allows your team to easily build robust real-time web applications.
 */

// import Echo from 'laravel-echo'

// window.Pusher = require('pusher-js');

// window.Echo = new Echo({
//     broadcaster: 'pusher',
//     key: 'your-pusher-key'
// });

Here's the app.js:

/**
 * First we will load all of this project's JavaScript dependencies which
 * includes Vue and other libraries. It is a great starting point when
 * building robust, powerful web applications using Vue and Laravel.
 */

require('./bootstrap');

window.Vue = require('vue');

/**
 * Next, we will create a fresh Vue application instance and attach it to
 * the page. Then, you may begin adding components to this application
 * or customize the JavaScript scaffolding to fit your unique needs.
 */

Vue.component('example', require('./components/Example.vue'));

const app = new Vue({
    el: '#app'
});

There were some tutorials to import axios in bootstrap.js by import axios from 'axios'; - and also did window.axios = axios in axisa.js but for some reason it didn't work. Please help me how can i use axios in Laravel.

8
  • 1
    Laravel comes with Axios already configured for you. What do your app.js and boostrap.js files look like? Commented Nov 7, 2017 at 14:47
  • And what is this axisa.js file? Why does it exist? Did you create it yourself? Commented Nov 7, 2017 at 14:48
  • Yes @NathanHeffley in public/js/ Commented Nov 7, 2017 at 14:49
  • 1
    Is it replacing your normal app.js file? Why did you delete the perfectly configured default Laravel axios and Vue stuff? Commented Nov 7, 2017 at 14:51
  • Yup! Like that. Commented Nov 7, 2017 at 14:51

2 Answers 2

3

Axios is a simple promise based HTTP client. In Laravel, it is on the window object by default, so just use like so:

GET

axios.get('/some-path').then(res => {
    console.log(res.data)
})

POST

let data = {
    some: "thing"
}
axios.post('/some-path', data).then(res => {
    console.log(res.data)
})

Documentation is pretty good, as always, RTFM.


EDIT 1

If you get undefined on the axios object, use

import axios from 'axios'

at the top of your JS file and if you are entirely missing Axios, npm install axios --save

Sign up to request clarification or add additional context in comments.

3 Comments

It says Error in mounted hook: "ReferenceError: axios is not defined" when i do the thing in axisa.js! Should i do this in app.js and then compile with laravel mix?
It says Unexpected Token import
@Sanjay Have you imported/required bootstrap.js in your axisa.js?
1

in your resource/assests/js/app.js

simple add: var axios = require('axios');

since import axios from 'axios' - seems to be depricated

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.