получить данные с использованием $ .ajax в React не работает

Наиболее важным различием между echo и return в моей точке зрения является: тип данных результата для каждого из них. когда мы пишем некоторые функции, такие как ниже:

<?php
    $value = 150;

    function firstFunction($value) {
        return $value + 1;
    }
    echo firstFunction($value) . '<br />';

    function secondFunction($value) {
        echo $value + 1;
    }
    secondFunction($value);

и да, оба из них дадут нам 151 в качестве выходного значения. Но в случае return мы напечатаем firstFunction($value) как тип данных int. Другое дело, в случае echo мы будем печатать secondFunction($value) как тип данных NULL. Вы можете попробовать напечатать каждый из них с помощью функции var_dump(), чтобы понять, что я имел в виду.

<?php
    var_dump(firstFunction($value)); ?>
    <br />
<?php
    var_dump(secondFunction($value));

Эта разница принесет пользу нам, когда мы обрабатываем некоторые значения, возвращаемые из баз данных, особенно в математических операциях, таких как (post просмотров) или что-то в этом роде. Это будет иметь смысл в отношении того, что было написано здесь. надеюсь, что я объяснил это простым способом.

1
задан François Maturel 13 July 2018 в 12:16
поделиться

3 ответа

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

Вам также необходимо убедиться, что вы разбираете строку JSON в ответе вашей сети запрос

Пример

class MyComponent extends React.Class {
  state = { items: [] };

  componentDidMount() {
    $.ajax({
      type: 'post',
      url: 'requests.php',
      data: {requestKey: "hello"}
    }).done(function(data){
      this.setState({
        items: JSON.parse(data)
      });
    }.bind(this));
  }

  render() {
    // ...
  }
}
0
ответ дан Tholle 17 August 2018 в 13:05
поделиться
  • 1
    все еще была та же ошибка: items.map не является функцией :( – S.Mhm 13 July 2018 в 12:55
  • 2
    @ S.Mhm Это разочаровывает. Не могли бы вы console.log указать ваш data в ответе на ваш запрос ajax? Это может быть не массив в ответе. – Tholle 13 July 2018 в 12:57
  • 3
    это данные, присваиваемые элементам: [{"img":"0.jpg","heading":"Proj 1","desc":"some text goes here!"},{"img":"0.jpg","heading":"Proj 1","desc":"some text goes here!"},{"img":"0.jpg","heading":"Proj 1","desc":"some text goes here!"}] :( при первом значении пунктов [], тогда это json выше! – S.Mhm 13 July 2018 в 13:18
  • 4
    @ S.Mhm Возможно, это строка. Вы пытались разобрать его в ответ на просьбу? JSON.parse(data) – Tholle 13 July 2018 в 13:22

Причина Функция JavaScript map работает с массивом, а изначально this.state.items не определена до тех пор, пока не получит ответ от запроса ajax.

компонент получает визуализированный до того, как ответ приходит от ajax, и он выбрасывает error

Решение Здесь мы можем установить начальное значение состояния {items:[]}, это должен быть массив, поэтому он мог бы выполнить map() любой без ошибок.

class MyComponent extends React.Class {
   constructor(props) {
       this.state = {
           items: []
       };
   }
}
0
ответ дан ATUL DIVEDI 17 August 2018 в 13:05
поделиться
  • 1
    Я сделал то же самое. но на мой компонент, похоже, не влияет изменение значения items. значение items изменяется после ответа ajax, но ничего не происходит в компоненте. благодаря – S.Mhm 13 July 2018 в 13:21

Первоначальный рендеринг требует, чтобы ваш массив элементов присутствовал в состоянии вашего компонента.

Вы должны инициализировать элементы в конструкторе, подобные этому

this.state = {
    items = []
}
1
ответ дан Dinesh undefined 17 August 2018 в 13:05
поделиться
  • 1
    извините, что вы имеете в виду, уравнение внутри объекта не будет работать! – S.Mhm 13 July 2018 в 12:56
  • 2
    поместите вышеуказанный код внутри конструктора вашего компонента. – Dinesh undefined 13 July 2018 в 13:00
  • 3
    Неожиданный токен (370: 12) 368 | супер (реквизит); 369 | this.state = {& gt; 370 | items = [] | ^ 371 | } 372 | } – S.Mhm 13 July 2018 в 13:07
Другие вопросы по тегам:

Похожие вопросы: