2017-12-15 19 views
0

以下のコードでは、データベースからすべてのデータを取得し、proj4_data変数に格納するためにajaxを使用しています。変数はグローバルです。私はページ上のボタンをクリックすると変数の値にアクセスすることができますが、コールバック関数がロードされた直後に変数値にアクセスしようとすると、変数の値は空になります価値を得ることを試みなさい)。グローバル変数の値にアクセスできないのはなぜですか?

$(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; 
    } 

答えて

0

それが完了するためにAJAX要求を待つ間、停止しませんあなたのコードの残りの部分を: は、誰かがなぜこれが起こっている教えて助けることができます。要求を送信し、すぐにアラートを実行します。依頼がまだ完了していないため、変数はまだ空です。

リクエストの後にアラートを実行する場合は、アラートをコールバック関数に入れます。

+0

ああ、それを得ました。はい、私はコールバックで警告を試み、それが働いた。ありがとうございました。また、コールバック関数のコードを書き直すことなく、別のJavaScriptファイルでこの変数にアクセスできるかどうかを知りたかっただけです。私は両方のファイルを自分のhtmlで正しい順序で定義しました。 – Mona

関連する問題