Как получить полученные 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']) значение, но из вне функции (...тут) Не судите строго, решение очень необходимо. Заранее спасибо всем!!! |
dztop,
var here; $.post( "json.php", onAjaxSuccess ); function onAjaxSuccess(data){ data = JSON.parse(data); here = data[0]['id']; alert( data[0]['id'] ); } alert(here); |
Выдает окно: undefined
И если можно, поясните как в общем получить доступ к массиву data из вне. |
Dilettante_Pro,
Выдает окно: undefined И если можно, поясните как в общем получить доступ к массиву data из вне. |
Цитата:
всё выделенное жирным шрифтом вписал? data в целом - точно так же, через внешнюю глобальную переменную Да, еще - ajax - асинхронный запрос, поэтому данные вовне функции появятся не сразу. попробуй setTimeout(alert(here),2000); (задержку подобрать) или в onAjaxSuccess сгенерить какое-нибудь событие, по которому смотреть результат |
Никак.
Код "извне" отрабатывает сразу "прям сейчас", функция onAjaxSuccess, принимающая данные срабатывает "потом", когда сервер ответит и данные придут. Разбивайте код логически на функции, и по цепочке вызывайте функции из функций по мере надобности. |
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'] ) Только нужно было выключить асинхронный запрос |
Только так делать нельзя, потому что вся страница висит пока идёт запрос, а та да.
|
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. |