在下面的代码中,我使用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;
}
答案 0 :(得分:0)
在等待AJAX请求完成时,其余代码不会停止。它发送请求,然后立即执行警报。由于请求尚未完成,因此该变量仍为空。
如果要在请求后运行警报,请将警报放入回调函数中。