Эта функция не позволяет мне передавать данные вне функции. Он возвращает правильные данные, но всякий раз, когда я пытаюсь добавить его в массив или аналогичный вне функции, он ничего не вернет. Мне известно о некоторых избыточных json-синтаксисах и строках, но, пожалуйста, проигнорируйте это. Ive пытался установить глобальные переменные без везения.Невозможно вернуть значение изнутри функции
var item.jid = 342323; //example
p = connection.vCard.get(item.jid);
p.done(function(vCard) {
var json = JSON.stringify(vCard);
var json = $.parseJSON(json);
$(json).each(function(item,val) {
$.each(val,function(k,v) {
var json2 = JSON.stringify(v);
var obj = JSON.parse(json2);
var what = obj.BINVAL;
if(what != undefined) {
var bgimg = what;
bgimg = "data:image/jpeg;base64,"+bgimg;
//console.log(bgimg); //This returns correct data, but only from within this each loop.
//return bgimg; //this does not return anything
//arr.push(bgimg);//this does not push anything to array
//console.log(item.jid); //does not return global var
}
});
});
});
EDIT
Heres функция им пытаются потянуть (с изменениями от ответа Роми в) для дальнейшего уточнения: я строю contactroster с аватарами.
var bgimg=null;
var arr = new Array();
function getAvatar(vCard) {
var json = JSON.stringify(vCard);
var json = $.parseJSON(json);
$(json).each(function(item,val){
$.each(val,function(k,v){
var json2 = JSON.stringify(v);
var obj = JSON.parse(json2);
var what = obj.BINVAL;
if(what != undefined){
bgimg = what;
bgimg = "data:image/jpeg;base64,"+bgimg;
arr.push(bgimg);
//console.log(bgimg); //This returns correct data.
}
});
});
};
function getRoster(){
connection.roster.requestRoster(function(roster){
var items = roster.getItems();
for(var i = 0; i < items.length; i++){
var arr = new Array();
var item = items[i];
var thejid = item.jid;
var thename = item.name;
arr.push(thejid);
arr.push(thename);
p = $.Deferred();
p = connection.vCard.get(item.jid);
p.done(function(vCard) {
getAvatar(vCard);
});
p.resolve();
console.log(arr);
var theavatar = //This would return whatever the deferred function would throw me.
$('.sidebar-nav').append("<li class='contacts'><div id='"+thejid+"' class='avatar' src='"+theavatar+"'></div><a href='#' class='"+thejid+"'>"+thename+"</a></li>");
}
Эй, Royi, спасибо, что нашли время, чтобы помочь, я действительно очень ценю это! , и вы правы, он находится в отложенном режиме. Используя вашу логику, я могу вызвать предупреждение, показывающее правильные данные. Тем не менее, им все еще не удается фактически передать данные во что угодно, как массив или переменная. Ive закончил хранение данных в localstorage и захватил его оттуда. однако это кажется настолько взломанным. Я считаю отложенным, чтобы быть довольно трудно понять, я мог бы найти другую библиотеку, которая сделает это в более прямом усадьбе. – Havihavi
«_im все еще не в состоянии фактически передать данные во все, что можно использовать как массив или переменную _» ----- мой первый образец передает данные в переменную. посмотрите на myResult. –
Im в убытке, извините, как мне кажется, вы передаете эти данные с помощью функции resolve(). Ive обновил мой код до полного monty, так что вы можете посмотреть, если у вас есть время =) – Havihavi