为什么我不能访问全局变量中的值

时间:2017-12-15 03:11:26

标签: javascript jquery

在下面的代码中,我使用ajax从数据库中获取所有数据并将其存储在proj4_data变量中。变量是全局的。当我单击页面上的按钮时,我能够访问变量的值,但是当我在回调函数加载完成后尝试访问变量值时,变量的值为空(警报就在我的位置)试着获得价值)。  有人可以帮助说明为什么会发生这种情况:

    $(document).ready(function() {
    var modal = document.getElementById('myModal');
    var prod_name =  document.getElementById('product_name');

    cart = new shopping_cart("jadrn026");

    proj4_data = new Array();
    $.get('/perl/jadrn000/proj4/get_products.cgi', storeData);
alert(proj4_data);
    $('#milk').on('click', function() {
    tmpString = "";

    var value = $("#milk").val();
    prod_name.innerHTML = value;
        tmpString += '<ul id="db_items">';
    for(var i=0; i < proj4_data.length; i++) {

        if(proj4_data[i][1] == "Milk chocolate") {
        var str1 = proj4_data[i][2].split("'").join("\\'");
        var str2 = proj4_data[i][3].split("'").join("\\'");
        var str3 = proj4_data[i][4].split("'").join("\\'");

        tmpString += "<li><button class=\"description\" onclick=\"showDesc(\'" + str1 + "\', \'" + str2 + "\', \'" + str3 +  "\', \'" + proj4_data[i][0] + "\', \'" + proj4_data[i][6] + "\')\"><img src=\"/~jadrn000/PROJ4_IMAGES/" + proj4_data[i][0]+".jpg\" alt=\""+ proj4_data[i][2]+"\""+
            " width=\"200px\"  /></button><br />";  
        tmpString += "<p id='price'>$" + proj4_data[i][6] + "</p>";
        tmpString += "<input type='button' value='Order' onclick=\"showDesc(\'" + str1 + "\', \'" + str2 + "\', \'" + str3 +  "\', \'" + proj4_data[i][0] + "\', \'" + proj4_data[i][6] + "\')\"" + proj4_data[i][0]+"' />";
        }
    }
    tmpString += "</ul>";
    var handle = document.getElementById('content');
    handle.innerHTML = tmpString;

    });
    function storeData(response) {
    var tmpArray = explodeArray(response,';');
    for(var i=0; i < tmpArray.length; i++) {
        innerArray = explodeArray(tmpArray[i],'|');
        proj4_data[i] = innerArray;
        }

    }


    // from http://www.webmasterworld.com/forum91/3262.htm            
    function explodeArray(item,delimiter) {
    tempArray=new Array(1);
    var Count=0;
    var tempString=new String(item);

    while (tempString.indexOf(delimiter)>0) {
    tempArray[Count]=tempString.substr(0,tempString.indexOf(delimiter));
    tempString=tempString.substr(tempString.indexOf(delimiter)+1,tempString.length-tempString.indexOf(delimiter)+1);
    Count=Count+1
    }

    tempArray[Count]=tempString;
    return tempArray;
    }  

1 个答案:

答案 0 :(得分:0)

在等待AJAX​​请求完成时,其余代码不会停止。它发送请求,然后立即执行警报。由于请求尚未完成,因此该变量仍为空。

如果要在请求后运行警报,请将警报放入回调函数中。