Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.03.2016, 20:21
Новичок на форуме
Отправить личное сообщение для Landgraf Посмотреть профиль Найти все сообщения от Landgraf
 
Регистрация: 02.03.2016
Сообщений: 3

Асинхронное программирование.
Что я хочу сделать: при получении массива диалогов я хочу по полученному 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);

}
Ответить с цитированием
  #2 (permalink)  
Старый 10.03.2016, 01:56
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Landgraf,
Один из вариантов тупого велосипеда кликнуть программно скрытую кнопку,
вставив перед этим данные в атрибут кнопки data-mygetajax="данные"
Тоже самое можно сделать, вызвав по получению аякса новую, заранее определённую функцию, передав ей данные, как параметры
==============
И да, максимальное число незавершенных запросов - 5, если может быть более, нужно строить очередь с ожиданием завершения первых пяти

Последний раз редактировалось Deff, 10.03.2016 в 01:59.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование под заказ (JavaScript, Meteor, Node.js, AngularJS) UnityCat Работа 4 21.10.2015 13:57
Въехать в программирование, развитие логики... xSPiRiTx Оффтопик 4 22.07.2015 15:45
Асинхронное программирование - реализация функции для "синхронизации" function Общие вопросы Javascript 8 22.06.2012 13:52
Асинхронное выполнение скриптов в HTML RUVATA Общие вопросы Javascript 6 15.08.2011 13:34
Асинхронное подключение файлов *.js kokacolla AJAX и COMET 6 09.07.2011 17:43