Как получить данные из этого вызова ajax

  • Автор темы Boleg1
  • Обновлено
  • 15, May 2024
  • #1
Привет, ребята,

Я получил данные с сервера с помощью метода ajax, но не знаю, как извлечь эти данные из текста ответа, чтобы использовать их где-то еще.

Любые предложения о том, как это сделать, будут очень признательны.

 
fetch("/path_to_file/data.json").then(response => {
 return response.text();
}).then(data => {
 if(data) {
 var foo = JSON.parse(data);
 console.log(data); // {"key1":"value1","key2":"value2"}
 retrieveData(foo.key1,foo.key2);
 }
});
function retrieveData(x,y) {
 var data = { a: x, b: y };
 return data;
}
var ax = retrieveData.a;
console.log(ax); // => not working


Код (разметка): Спасибо,

Boleg1


Рег
30 Mar, 2013

Тем
67

Постов
214

Баллов
569
  • 21, May 2024
  • #2
Все это является прекрасным примером того, почему fetch не является улучшением по сравнению с XMLHttpRequest.

Особенно, когда в нем нет жонглирования/настройки типа mime, нет обработки кода ответа и т. д. и т. п.

Тем более эта сумасшедшая цепочка «то, то потом» обещает и бесполезную функцию стрелок, которая просто усложняет работу и приводит к накладным расходам ни за что.

Хотя даже при использовании fetch/then зачем эта дополнительная процедура?

 fetch('/path_to_file/data.json').then(function(response) {
var string = JSON.parse(response.text);
console.log(string);
});


Код (разметка): Вырезаем весь лишний мусор.

Конечно, если у вас есть такая маленькая функция, возникает вопрос, зачем делать ее отдельной функцией вместо того, чтобы просто поместить ее туда, где вы ее вызываете.

 function fABC(file, callback) { fetch(file).then(function(response) { callback(JSON.parse(response.text())); }); }


Код (разметка): смех в том, что простое выполнение fetch/then вручную, а не в функции, в конечном итоге имеет тот же размер, что и ваш код var string=, а это означает, что на самом деле нет законного оправдания даже для создания этой функции fABC.

Черт, это было бы меньше, если бы кто-то использовал умственную карликовость с функцией стрелки.
 

Юлия4


Рег
26 Feb, 2011

Тем
71

Постов
210

Баллов
585
  • 01, Jun 2024
  • #3
Спасибо @deathshadow, Мне нравятся обе сокращенные версии. Однако первый выдал ошибку.

Ответ.текст второго сообщения выглядит примерно так:

 ƒ text() { [native code] }


Код (разметка): Я думаю, что это функция, поэтому ее невозможно проанализировать, но я собираюсь ее изменить.

Посмотрим, смогу ли я заставить это работать.
 

Affiliate.lamoda


Рег
30 Mar, 2012

Тем
80

Постов
186

Баллов
616
  • 09, Jun 2024
  • #4
Хорошо, я понял это. На помощь приходит нечто, называемое обратным вызовом:
 function fABC(file, callback) {
 fetch(file).then(response => {
 return response.text();
 }).then(data => {
 if(data) {
 var foo = JSON.parse(data);
 callback(foo);
 }
 });
}
var string = fABC("/path_to_file/data.json", function(ss){
 console.log(ss); // wooohsa, this takes me two days... );
});
Код (разметка):
 

Itcommander


Рег
19 Mar, 2012

Тем
82

Постов
183

Баллов
613
  • 13, Jun 2024
  • #5
Я думаю, это потому, что строки 14 и 15 находятся за пределами блока ajax. Что произойдет, если вы поместите их в метод извлечения данных()?
 function retrieveData(x,y) {
 var data = { a: x, b: y };
 console.log(data);
 return data;
}
Код (разметка):
 

Satyr1


Рег
21 Dec, 2014

Тем
68

Постов
185

Баллов
535
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно