Асинхронное программирование.
Что я хочу сделать: при получении массива диалогов я хочу по полученному id получать имя пользователя. Так как функция не сразу возвращает имя, я получаю undefined в нужный мне момент. Как правильно решить такую задачу? Я не знаю как это можно решить callback'ом к сожалению. Разве что при успешной загрузке изменять состояние переменной и если эта переменная изменена, выводить диалоги и имена.
function loadAccountInfo(url) { var fname_global; fname_global="nothing :("; var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState == XMLHttpRequest.DONE && xmlhttp.status == 200) { fname_global=parseJSON(xmlhttp.responseText); } } xmlhttp.open("GET", url, true); xmlhttp.send(); return fname_global; } function parseJSON(response) { var arr = JSON.parse(response); var fName; fName=arr.response[0].first_name; return fName; } function loadDialogs(url) { var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState == XMLHttpRequest.DONE && xmlhttp.status == 200) { parseJSON3(xmlhttp.responseText); } } xmlhttp.open("GET", url, true); xmlhttp.send(); } var dialogArray = new Array(); function parseJSON3(response) { console.log(response); console.log("dialogs: "); var arr = JSON.parse(response); for(var i = 1; i < arr.response[0]; i++) { try { console.info('uid' in arr.response[i], " № "+i); dialogArray.push({uid:arr.response[i].uid, body:arr.response[i].body, mid:arr.response[i].mid, read_state:arr.response[i].read_state, out:arr.response[i].out, date:arr.response[i].date, title:arr.response[i].title }); } catch (e) { console.log("Debug warning"); } } var name; var nameArray=new Array(); for(var i = 1; i < 15; i++) { name=loadAccountInfo("https://api.vk.com/method/users.get?user_id="+dialogArray[i].uid); } for(var i = 1; i < 15; i++) nameArray.push(name); for(var i = 1; i < 15; i++) console.log(name+" "+dialogArray[i].body+" "+dialogArray[i].date); } |
Landgraf,
Один из вариантов тупого велосипеда кликнуть программно скрытую кнопку, вставив перед этим данные в атрибут кнопки data-mygetajax="данные" Тоже самое можно сделать, вызвав по получению аякса новую, заранее определённую функцию, передав ей данные, как параметры ============== И да, максимальное число незавершенных запросов - 5, если может быть более, нужно строить очередь с ожиданием завершения первых пяти |
Часовой пояс GMT +3, время: 04:18. |