#javascript #ajax #vue.js #vuejs2 #vue-component
#javascript #ajax #vue.js #vuejs2 #vue-компонент
Вопрос:
У меня есть этот компонент, я только начал работать с компонентами до этого момента, когда я пытаюсь извлечь данные через ajax, при console.log
вводе внутри метода — я получаю фактический результат, но результат не возвращается.
-
Чего я не понимаю (в vanilla js при выполнении того же самого из объекта это работает нормально.. так почему в Vue это не работает? В чем причина из-за кулис?)
-
Как я могу извлекать данные с помощью
$.ajax
? -
Каковы мои другие альтернативы и почему? (Я знаю об Axio, никогда им не пользовался, не уверен, зачем его использовать, если я могу использовать fetch, который, кстати, fetch у меня тоже не сработал — вот почему я вернулся к $.ajax).
index.js
import Vue from 'vue';
import VueRouter from 'vue-router';
import axios from 'axios';
import VueAxios from 'vue-axios'
Vue.use(VueRouter);
Vue.use(VueAxios, axios);
const Dashboard_testcomponent = () => import('../vue/dashboard/test/testcomponent.vue');
let routes = [
{
path: '/main',
component: Dashboard,
children: [
{
path: 'testcomponent',
component: Dashboard_testcomponent
}
]
}
];
window.router = new VueRouter({
mode: 'history',
routes
});
testcomponent.vue:
<script>
import Form from "../../components/Form.vue";
import Tabs from "../../components/Tabs.vue";
export default {
name: 'testcomponent',
components: {
Form,
Tabs
},
data() {
return {
reportType: 'testreport',
dates: {},
list: {}
}
,
created() {
},
mounted() {
},
destroyed() {
},
watch: {
},
methods: {
// Submit form
formSubmit: function(data) {
console.log('Submit form here');
console.log(data);
// SetLoader();
this.list = this.getList();
console.log(this.getList());
console.log(this.List);
},
// Fetch List By List type
getList: function() {
axios.post('/call/api/getList', {
'reportType': this.reportType
})
.then(function (response) {
if (response.status === true) {
console.log(response);
return response.data;
}
})
.catch(function (error) {
console.log(error);
});
}
}
}
</scrip1t>
<templat e>
<Form
:useGroupFilter="true"
:useDateRange="true"
@submit="formSubmit"
/>
</template>
Комментарии:
1. если вы используете jquery ajax, вам необходимо установить и импортировать его в свой компонент. Возможно, вам также потребуется добавить его в качестве плагина. Вы все это сделали?
2. Я рекомендую вам использовать Axios с Vue.js . Этим намного проще управлять. vuejs.org/v2/cookbook/using-axios-to-consume-apis.html
3. @TeddyMcZieuwa сделал это, jquery работает хорошо
4. пожалуйста, опубликуйте также свой журнал ошибок
Ответ №1:
В вашем коде getList ничего не возвращает, потому что axios.post является асинхронной функцией и выполняется позже. Вы должны назначить данные ответа в .затем обратный вызов. Что-то вроде:
getList: function() {
axios.post('/call/api/getList', {
'reportType': this.reportType
})
.then(function (response) {
// if (response.status === true) { (if 'then' fired means that it succeeded already)
console.log(response);
this.list = response.data;
// }
})
.catch(function (error) {
console.log(error);
});
}
Ответ №2:
Установите Axios for в каталог вашего проекта
$ npm install axios
импорт в app.js или в компоненте, который вы хотите
<script>
//optional import for individual component
import axios from "axios";
</script>
//if you have imported in app.js
Vue.use(axios);
затем выполните вызов axios, подобный:
let reqData = {
p_Params1: '',
p_Params2: '',
p_Params3...: ''
};
axios({
method: "post",
url: "http://127.0.0.1/sample_sub/sample.ext",
crossdomain: true,
data: $.param(reqData),
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
})
.then(response => {
//your resposne here
})
.catch(error => console.log(error));
Внимание! по умолчанию axios не анализирует данные в json, поэтому используйте $.param
Комментарии:
1. который на самом деле не отвечает на # 3. и вообще не отвечает на # 2 : (
2. вы импортировали ajax в свой проект? тогда это должно было сработать или проверьте ваш импорт
3. и по умолчанию vue рекомендует использовать axois для вызовов netrwork, так что попробуйте, и это очень просто, как ajax
4. но зачем использовать это, а не извлекать?
5. fetch говорят о fetch api или Ajax?