У меня есть проект, который использует jQuery, и у меня есть много функций, возвращающих json, и я пытаюсь заполнить переменную данных некоторыми тестовыми данными, но когда я перебираю данные, я ничего не получаю.
Я проверил, что мой вызов ajax возвращает данные json, и это так, и я как бы не понимаю, почему ничего не возвращается
<div id = "app">
<template v-for = "person in persons">
<div>
{{ person.FirstName }}
</div>
</template>
</div>
<script>
new Vue({
el: '#app',
created: function () {
this.GetUserDetails();
},
data: {
persons: []
},
methods: {
GetUserDetails() {
this.persons = CommonFunctions.GetJSON("Person");
}
}
});
</script>
Вот некоторые из Person json,
[{
"id": 1,
"FirstName": "Auroora",
"LastName": "Kosel",
"gender": "Female"
},
{
"id": 2,
"FirstName": "Nevins",
"LastName": "Rulf",
"gender": "Male"
},
{
"id": 3,
"FirstName": "Silvana",
"LastName": "Cragoe",
"gender": "Female"
}]
** РЕДАКТИРОВАТЬ ** Вот функция GetJSON
var CommonFunctions = {
GetJSON: (whichOne) => {
$.ajax({
type: "GET",
url: "../Scripts/" + whichOne + "JSON.json",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
return data;
}
});
}
}
возвращается как неопределенный
Можете ли вы включить код функции CommonFunctions.GetJSON?
Только что отредактировал и добавил





Ваша функция GetJSON() ничего не возвращает.
var CommonFunctions = {
GetJSON(whichOne) {
return $.getJSON("../Scripts/" + whichOne + "JSON.json");
// ^^^^^^
}
}
Now it returns the request/promise (and uses jQuery's shorthand method for retrieving json).
В своем компоненте вы бы написали
async GetUserDetails() {
this.persons = await CommonFunctions.GetJSON("Person");
}
Или, если вам не нравится async / await:
CommonFunctions.GetJSON("Person").then(data => {
this.persons = data;
});
Если я добавлю console.info (данные) в успех GetJSON, он вернет данные
Странно, поместите console.info(this.persons) под линией this.persons = CommonFunctions.GetJSON("Person");, что он записывает?
возвращает undefined
Именно потому, что GetJSON ничего не возвращает / undefined. Я обновлю свой ответ рабочим методом GetJSON ...
Я обновил свой ответ реализацией GetJSON, которая возвращает запрос / обещание.
А, хорошо, так что, прочитав оба ответа, похоже, что проблема была в состоянии гонки?
Насколько я понимаю, функция ajax является асинхронной, поэтому она не возвращается напрямую
Есть простой обходной путь:
methods: {
GetUserDetails() {
this.persons = CommonFunctions.GetJSON("Person", this);
}
}
и во вспомогательной функции:
var CommonFunctions = {
GetJSON: (whichOne, self) => {
$.ajax({
type: "GET",
url: "../Scripts/" + whichOne + "JSON.json",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
self.persons = data
return data;
}
});
}
}
Если вы поместите
console.info(this.persons)вGetUserDetails, получите ли вы надлежащую стоимость?