我正在尝试从多个嵌套函数中获取变量(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}
答案 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}
感谢大家的参与和好主意!