Не удается получить GET после асинхронного AJAX-запроса в реагировать. Компонент

0

У меня проблема с моим кодом 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);

Теперь это дает мне ошибку из-за конструктора.

Теги:
components

1 ответ

2
Лучший ответ

Из документации 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});
}

Ваша обработка данных выполняется другим способом, она будет более чистой!

  • 0
    Это не работает. Или я не делаю это правильно. Я добавил твой код. затем добавил getInitialState () {return {data: []}; } Затем добавлено: componentDidMount () {this.getList; } И в рендере if (jQuery.isEmptyObject (this.state.data)) {console.log ("Нет данных"); } else {console.log (this.state.data); } Но опять же это дает мне эту пустую страницу и Cannot GET. Если я пытаюсь перейти на страницу по ссылке, то в консоли появляется сообщение: Uncaught TypeError: Невозможно прочитать свойство 'data' из null
  • 1
    constructor () {super (); this.getList = this.getList.bind (this); this.state = {data: []}; }.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню