2013-03-08 65 views
0

我有这样的代码:jQuery的全局变量使用

var products = []; 

$(document).ready(function($){ 

    $.fn.load_products = function(){  
     $.getJSON('/restaurant/get_products',function(data){ 
      products = data[0]; 
      alert(products[0]['idProduct']);//this works fine   
     }); 
     // EDITED: alert was here, but was a mistake sorry 
    } 

    $.fn.draw_products = function(){ 
     alert(products[0]['idProduct']); //this doesn't work    
    } 

    $(this).load_products();  
    $(this).draw_products(); 
} 

我已经在全球范围内声明的产品,但它看起来像它的内部load_products重新定义一次。

当我执行它时,它说产品[0]是未定义的。

编辑:一些额外的信息。控制台中的错误在警报执行后出现。

+0

我打算冒险猜测你的产品数组是空的。 – 2013-03-08 18:00:20

+0

尝试将整个产品变量记录到控制台,它可能是您的产品数组为空,并且您尝试访问元素,如果它。 – Ankit 2013-03-08 18:00:57

+0

看起来像异步加载问题 – 2013-03-08 18:01:00

回答

1

这是因为draw_productsload_products的AJAX调用返回之前被调用。您需要在AJAX调用中的回调中调用draw_products

+1

那么他怎么说'load_products'中的'alert'工作 – 2013-03-08 18:04:02

+0

他是对的,错误出现在警报执行之前。 – beerLantern 2013-03-08 18:06:22

+0

我需要一个回调 – beerLantern 2013-03-08 18:06:55