jquery全局变量可以在任何地方使用

我开始怀疑jquery易于使用和灵活。 我有这个:

var prodata=[]; var request = $.get("proDB.txt", function(data) { var lines=data.split(/\n/); var numberofmodels=lines.length-2; //var prodata=[]; var i; prodata.push(0); var fieldnames=lines[0].split(/\t/); for (i = 1; i < lines.length-1; ++i) { var fields=lines[i].split(/\t/); prodata.push(i); var j; prodata[i]={}; for (j = 0; j < fields.length; ++j) { //prodata[i][fieldnames[j]]=fields[j]; var str=fieldnames[j]; prodata[i][str]=fields[j]; } } //FILL THE DROPDOWN LIST var options = ''; for (i = 1; i = 0) { var iselected = i; } options += '' + prodata[i]['name']+', '+prodata[i]['brand']+', '+prodata[i]['model']+''; } $("#userchosenpromodel").html(options); //SELECT DEFAULT OPTION $('#userchosenpromodel option[value="' + prodata[iselected]['id'] + '"]').attr("selected", "selected"); }, 'text'); //$.get 

我想在我的代码中使用proId ,在它被定义为:

 //SUBMIT FORM $('#submitbutton').click(function(e) { e.preventDefault(); request.done(function(){ proId=$('#userchosenpromodel option[selected="selected"]').val(); proId=parseInt(proId); computeUserDimensions(prodata[proId]); }); }); console.log(proId); 

如何?

prodata同样的问题…我有request.done 。我无法摆脱

谢谢

你没有jQuery的问题,但有基于异步/事件的逻辑。

无法同步使用异步函数的返回。 您必须在回调或您从回调中调用的函数中使用结果:

 request.done(function(){ var proId=$('#userchosenpromodel option[selected="selected"]').val(); console.log(proId); }); 

为什么不这样做:

 request.done(function(){ proId=$('#userchosenpromodel option[selected="selected"]').val(); doSomethingWithProId(); }); function doSomethingWithProId(){ console.log(proId); } 

或者它不需要是全球性的

 request.done(function(){ var proId=$('#userchosenpromodel option[selected="selected"]').val(); doSomethingWithProId(proId); }); function doSomethingWithProId(proId){ console.log(proId); } 

我心中的第二个解决方案更好。 无论你需要做什么,使用proId构建你的函数来传递数据。 这样您就不需要污染全局范围。 听起来你需要更好地理解JS。