从多个嵌套函数中获取变量

时间:2013-03-25 18:48:17

标签: javascript jquery variables

我正在尝试从多个嵌套函数中获取变量(lib)

var nme='name',lib;

$('script').each(function(){

    var src=$(this).attr('src');

    if(typeof(src)==='undefined'){src='';}

if(src.indexOf(nme)!==-1){

    $.get($(this).attr('src').match(/\w([^ ]+)spbin/)[0]+'/conf/ptmedia.plist',
        function(c){
            $(c).find('key').each(function(){
                if($(this).html()==='MediaLib'){lib=$(this).next().html();}
            });
        }
    );

}
});

if(lib==='some lib'){DO STUFF}

2 个答案:

答案 0 :(得分:4)

你的问题不在于范围界定,问题是你有一个异步的AJAX调用。 您应该将HTML的更改放在回调函数内的.null中:

$.get($(this).attr('src').match(/\w([^ ]+)spbin/)[0]+'/conf/ptmedia.plist',
        function(c){
            $(c).find('key').each(function(){
                if($(this).html()==='MediaLib'){lib=$(this).next().html();}

                $('.null').html(lib);
            });
        }
});

在JavaScript中,IO通常是异步。这意味着当您进行AJAX调用时,它不会立即发生,而是等待值从HTTP请求返回,然后调用回调。在你的情况下,function(c)是回调,当 AJAX调用的值到达时,它会被执行。

因此,实际上您将HTML的{​​{1}}内容更新为未定义,因为它在更新之前获得了.null的值。

答案 1 :(得分:0)

我解决了这个问题如下:

var nme='name';

    $('script').each(function(){

    var src=$(this).attr('src');

        if(typeof(src)==='undefined'){src='';}

        if(src.indexOf(nme)!==-1){media=$(this).attr('src').match(/\w([^ ]+)spbin/)[0];}

    });


    function ffn(){
    $($.ajax({url:media+'/conf/ptmedia.plist',async:false}).responseText).find('key').each(function(){
        if($(this).html()==='string'){value=$(this).next().html();}
    });

    return value;
    }

    if(ffn()==='some lib'){DO STUFF}

感谢大家的参与和好主意!