У меня есть функция, называемая request
, которая вызывает вызов AJAX API и возвращает некоторые данные JSON. RenderEntry создает компонент Entry, который в основном представляет собой div с элементом h3. Предполагается, что элемент h3 исходит из данных JSON, который возвращается с request
.Неопределенный объект, возвращаемый функцией при вызове в другой функции
В RenderEntry
, я пытаюсь вызвать request
с id
, который передается в нее, присвоить его постоянной data
, а затем передать data.name
в Entry
в качестве опоры. data
, однако, не определено.
По правде говоря, это мое приложение для борьбы с кулаком, которое я загрузил с помощью create-react-app
. Я знаю, что request
работает, когда вы передаете в него литерал id
, но я не понимаю, почему он не работает в этой функции.
function Entry(props) {
return (
<div>
<h3>{props.name}</h3>
</div>
);
}
class App extends Component {
RenderEntry(id) {
const data = request(id);
console.log(request(id)); // undefined
console.log(data); // undefined
return <Entry name={data.name}/>
}
render() {
return (
this.RenderEntry(8000)
);
}
}
function request(id) {
const base = 'https://url.com/'
const request = new XMLHttpRequest();
request.open('GET', base + id, true);
request.onload = function() {
if (this.status >= 200 && this.status < 400) {
// Success!
const data = JSON.parse(this.response);
// console.log(data);
return data;
} else {
console.log('We reached our target server, but it returned an error!');
}
};
request.onerror = function() {
console.log('There was a connection error of some sort');
};
request.send();
}
запроса Ajax является функцией асинхронного –
Вашего запроса (ID), вероятно, возвращает до фактического запрос завершен. – sheunis
Я добавил функцию запроса (id). Я думал, что возвращение к успеху означает возвращение, когда запрос заканчивается? –