я хочу загрузить данные из openweathermap, чтобы я мог их отобразить, но получаю неперехваченную ошибку диапазона: превышен максимальный размер стека вызовов

#javascript #html #jquery #json

#javascript #HTML #jquery #json

Вопрос:

я создал div с идентификатором ‘temporary’, чтобы я мог вставлять данные из openweathermap.org API, но я получаю ошибку на консоли, и я не знаю почему. Я новичок в загрузке данных из API. вот полный HTML-код jsfiddle code здесь

вот сценарий, в котором произошла ошибка

 var data;

$("form").click(function(evt){
  evt.preventDefault();
  loadJson();
});

function loadJson(){
  loadJson("https://samples.openweathermap.org/data/2.5/find?q=Londonamp;appid=b7e1c74ddc5f04e3e18d2ce29e5d432camp;units=metric", displayData);
};

function displayData(temp){
  data = temp;

  $("#temporary").html(data);
};
</script> ```
  

Комментарии:

1. [1] loadJson вызывает [2] loadJson , затем [2] loadJson вызывает [3] loadJson бесконечно. Это цикл инициализации.

2. как я могу это исправить?

3. loadJson является бесконечно рекурсивным. Как вы думаете, что он должен делать?

Ответ №1:

Ваша функция loadJson вызывает саму себя, пока ваш стек не превышен.

Перепишите эту функцию так, чтобы она загружала json и не вызывала себя бесконечно

Комментарии:

1. что я могу сделать, чтобы я мог правильно загружать данные из API

2. Вы можете выполнить загрузку json любым способом — xhr, выборку, подключение к сокету и т.д.

Ответ №2:

Вам следует использовать другое имя

 var data;

$("form").click(function(evt){
  evt.preventDefault();
  anotherNameForLoadJson();
});

function anotherNameForLoadJson(){
  loadJson("https://samples.openweathermap.org/data/2.5/find?q=Londonamp;appid=b7e1c74ddc5f04e3e18d2ce29e5d432camp;units=metric", displayData);
};

function displayData(temp){
  data = temp;

  $("#temporary").html(data);
};