2014-02-20 93 views
0
$http({ 
    method: 'GET', 
    url: '../URL' 
}). 
success(function(data, status, headers, config) {    
    items = data; 
}) 

if(items > 0){ 
// do something 
} 

items在我的情况没有定义。我想知道我将数据分配到没有var的项目中,所以它是一个全局变量。我也尝试在全局范围声明items = "",成功范围不覆盖并将数据分配给它。javascript变量全局和局部范围混淆

+0

你的问题不是局部/全局,这是治疗的异步调用的同步调用。 'items> 0'检查在'items = data'运行之前运行。 – epascarello

+0

请向我们展示您使用的实际代码,因为您的问题中的语法错误使您无法知道您最近做了什么。也就是说,我会愿意投注,你试图在回调中分配'items',所以你的'if(items> 0)'发生在赋值之前...... –

+0

$ http返回一个承诺。当promise成功解析时,您应该使用then()函数来执行代码 –

回答

0

你正在做的操作成功回调后获得的数据,它不应该这样做。

以下部分

if(items > 0){ 
// do something 
} 

,你操纵回调后得到的数据应该是成功回调自身内部。由于代码不是以同步方式执行的,因此使变量全局不是实现它的方式。

所以如果条件

if(items > 0){ 
// do something 
} 

将会得到执行,即使之前的成功回调被触发。因此,items变量将不会在那个时间设置。

你的代码应该像

success(function(data, status, headers, config) {    
    items = data; 
    //do your manipulation here 
})