0

我正在尝试从多个嵌套函数中获取变量(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}
4

2 回答 2

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内容更新为未定义,因为它在更新之前.null获得了 的值。lib

于 2013-03-25T18:49:58.037 回答
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}

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

于 2013-03-25T20:34:30.663 回答