У меня проблема с моим кодом responsejs. Я прочитал поток об асинхронном мире и проблемах, которые могут возникнуть, и я думаю, что я это исправить, но теперь я получаю пустой текст с текстом Can not GET/thenameofthepage.
Это мой код сразу после реагирования. Компонент
getList() {
var returnValue;
$.ajax({
type: "get",
url: "###URL###",
cache: false,
async: false,
success : function(data) {
returnValue = data;
}
});
return returnValue;
}
и это код справа после render() {
console.log(this.getList());
Если я консоль регистрирую функцию, тогда все в порядке. Но когда я пытаюсь передать его переменной, все ломается. Я сделал асинхронный. Не работает. Я попытался с начальными состояниями, и ComponentDidMount() снова не работает.
PS
Я попытался использовать интернет-гид:
constructor() {
this.state = { data: [] };
}
getList() {
$.ajax({
type: "get",
url: "http://havvamustafa.devel.signature.eu.com/manage/collection/list_all_ajax",
cache: false,
dataType: 'json',
success: (data) => {
this.setState({data: data});
}
});
}
затем
componentDidMount() {
this.getList();
}
И в конце
console.log(this.state.data);
Теперь это дает мне ошибку из-за конструктора.
Из документации Jquery $.ajax использование async: false
устарело
async (по умолчанию: true)
Тип: Boolean
По умолчанию все запросы отправляются асинхронно (т.е. по умолчанию это значение равно true). Если вам нужны синхронные запросы, установите для этого параметра значение false. Междоменные запросы и dataType: запросы "jsonp" не поддерживают синхронную работу. Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, пока запрос активен. Начиная с jQuery 1.8, использование async: false с jqXHR ($.Deferred) устарело; вы должны использовать параметры успеха/ошибки/полного обратного вызова вместо соответствующих методов объекта jqXHR, таких как jqXHR.done() или устаревший jqXHR.success().
Я не знаю, с какими проблемами вы сталкиваетесь при работе с асинхронной выборкой данных, но не забывайте, что использование синхронных запросов блокирует браузер во время ожидания запроса. Вы можете сделать это проще:
getList() {
$.ajax({
type: "get",
url: "###URL###",
cache: false
}).done(this.handleSuccess);
},
handleSuccess(results) {
this.setState({data: results});
}
Ваша обработка данных выполняется другим способом, она будет более чистой!