Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 无法从函数内部返回值_Jquery_Variables_Return Value - Fatal编程技术网

Jquery 无法从函数内部返回值

Jquery 无法从函数内部返回值,jquery,variables,return-value,Jquery,Variables,Return Value,此函数不允许我在函数外部传递数据。 它返回正确的数据,但每当我尝试将其添加到函数外部的数组或类似对象时,它都不会返回任何内容。 我知道一些冗余的json解析和字符串化,但请忽略这一点。我尝试过设置全局变量,但运气不好 var item.jid = 342323; //example p = connection.vCard.get(item.jid); p.done(function(vCard) { var json = JSON.stringify(vCard); v

此函数不允许我在函数外部传递数据。 它返回正确的数据,但每当我尝试将其添加到函数外部的数组或类似对象时,它都不会返回任何内容。 我知道一些冗余的json解析和字符串化,但请忽略这一点。我尝试过设置全局变量,但运气不好

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
            }
        });
    });           
});
编辑
下面是我试图使用的功能(与罗米的答案有所不同),以进一步澄清:我正在与阿凡达建立一个联系人名单

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>");

   }
var bgimg=null;
var arr=新数组();
功能getAvatar(vCard){
var json=json.stringify(vCard);
var json=$.parseJSON(json);
$(json).each(函数(项,val){
$。每个(val,函数(k,v){
var json2=JSON.stringify(v);
var obj=JSON.parse(json2);
var what=obj.BINVAL;
如果(什么!=未定义){
bgimgwhat;
bgimg=“数据:图像/jpeg;base64,”+bgimg;
arr.push(bgimg);
//console.log(bgimg);//返回正确的数据。
}
}); 
});
};
函数getRoster(){
连接.花名册.请求花名册(功能(花名册){
var items=花名册.getItems();
对于(变量i=0;i”;
}

您处于异步/延迟执行模式

我看不到像你这样回报有任何好处(也不会起作用):

:

但我更喜欢:

var d =  $.Deferred();


function doWhatever(x)
{
  //do wtf you want
  alert(x)
}

var myResult=null;

d.done(function (a){ doWhatever(a)});


d.resolve(1);

嘿,罗依,谢谢你花时间帮忙,我真的非常感谢!你说得对,它处于延迟模式。使用你的逻辑,我能够触发一个警报,显示正确的数据。但是,我仍然无法将数据实际传递到任何可用的东西,如数组或变量。我最终将数据存储在本地存储器中d从那里抓取数据。然而,这感觉太粗糙了。我发现延迟很难理解,我可能会找到另一个更直接的库来实现它。“我仍然无法将数据传递到任何可用的东西,比如数组或变量。”-----我的第一个示例确实将数据传递给了一个变量。看看我的结果。我不知道,对不起,我觉得它是通过resolve()函数传递数据的。我已将我的代码更新到完整的月份,所以如果有时间,可以看一看。)解析只是点燃了整个链条。你可以忽略它。我的延迟对象不会调用
done
,除非有人说某事
done
这就是
resolve
要做的。你没有它是因为你使用的API(connection.vCard.get(item.jid);)内部呼叫
resolve
。我明白了吗?啊,是的。我现在明白了。哎哟……你觉得有什么办法可以解决吗?不管怎样,谢谢你抽出时间:)
var d =  $.Deferred();


function doWhatever(x)
{
  //do wtf you want
  alert(x)
}

var myResult=null;

d.done(function (a){ doWhatever(a)});


d.resolve(1);