Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как получить полученные json данные из вне функции (https://javascript.ru/forum/misc/65904-kak-poluchit-poluchennye-json-dannye-iz-vne-funkcii.html)

dztop 14.11.2016 16:30

Как получить полученные json данные из вне функции
 
Есть файл json.php, который генерирует json данные такого вида:
json.php
[{"id":"1","par1":"par1","par2":"par2"},
{"id":"2","par1":"par1","par2":"par2"},
{"id":"3","par1":"par1","par2":"par2"}]

есть файл которые принимает данные и обрабатывает. в данном случае выводит значение json данных
index.
$.post(
"json.php",
onAjaxSuccess
);

function onAjaxSuccess(data){
data = JSON.parse(data);
alert( data[0]['id'] );
}

...тут


Задача состоит в том, как вывести тот же (data[0]['id']) значение, но из вне функции (...тут)

Не судите строго, решение очень необходимо.
Заранее спасибо всем!!!

Dilettante_Pro 14.11.2016 16:35

dztop,


var here;
$.post(
"json.php",
onAjaxSuccess
);

function onAjaxSuccess(data){
data = JSON.parse(data);
here = data[0]['id'];
alert( data[0]['id'] );
}

alert(here);

dztop 14.11.2016 16:46

Выдает окно: undefined
И если можно, поясните как в общем получить доступ к массиву data из вне.

dztop 14.11.2016 16:49

Dilettante_Pro,
Выдает окно: undefined
И если можно, поясните как в общем получить доступ к массиву data из вне.

Dilettante_Pro 14.11.2016 17:22

Цитата:

Сообщение от dztop (Сообщение 435019)
Dilettante_Pro,
Выдает окно: undefined
И если можно, поясните как в общем получить доступ к массиву data из вне.

до внесения изменений что выдавал?
всё выделенное жирным шрифтом вписал?

data в целом - точно так же, через внешнюю глобальную переменную
Да, еще - ajax - асинхронный запрос, поэтому данные вовне функции появятся не сразу.

попробуй
setTimeout(alert(here),2000);
(задержку подобрать)
или в onAjaxSuccess сгенерить какое-нибудь событие, по которому смотреть результат

Aetae 14.11.2016 17:26

Никак.
Код "извне" отрабатывает сразу "прям сейчас", функция onAjaxSuccess, принимающая данные срабатывает "потом", когда сервер ответит и данные придут.
Разбивайте код логически на функции, и по цепочке вызывайте функции из функций по мере надобности.

dztop 14.11.2016 18:14

Dilettante_Pro спасибо за мысль умную, все оказалось просто:
var dataJson = $.ajax({
url: "json.php",
type: "json",
dataType: "html",
async:false
}
).responseText;

var data = JSON.parse(dataJson);
alert( data[0]['id'] )

Только нужно было выключить асинхронный запрос

dztop 14.11.2016 18:14

Цитата:

Сообщение от Dilettante_Pro
спасибо за мысль умную, все оказалось просто:
var dataJson = $.ajax({
url: "json.php",
type: "json",
dataType: "html",
async:false
}
).responseText;

var data = JSON.parse(dataJson);
alert( data[0]['id'] )

Только нужно было выключить асинхронный запрос

спасибо за мысль умную, все оказалось просто:
var dataJson = $.ajax({
url: "json.php",
type: "json",
dataType: "html",
async:false
}
).responseText;

var data = JSON.parse(dataJson);
alert( data[0]['id'] )

Только нужно было выключить асинхронный запрос

Aetae 14.11.2016 19:39

Только так делать нельзя, потому что вся страница висит пока идёт запрос, а та да.

Dilettante_Pro 15.11.2016 16:00

dztop
Представьте, что setTimeout - это асинхронный запрос.

<button>Проверка ответа</button>
<script>
   var answer = 'Нет ответа';

   setTimeout(onAjaxSuccess, 5000);

   function onAjaxSuccess(data) {
      data = 'Ответ получен';
      answer = data;
      document.querySelector('button').click();
   };
   
  // тут
   document.querySelector('button').onclick = function() {
       alert(answer);
   };
</script>


Часовой пояс GMT +3, время: 19:56.