jquery全局变量在任何地方都可用
我开始怀疑jquery是否易于使用和灵活。 我有这个:jquery全局变量在任何地方都可用,jquery,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].spl
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 < lines.length-1; ++i) {
if (prodata[i]['name'].indexOf("elly") >= 0) {
var iselected = i;
}
options += '<option label="bla" value="' + prodata[i]['id'] + '">' + prodata[i]['name']+', '+prodata[i]['brand']+', '+prodata[i]['model']+'</option>';
}
$("#userchosenpromodel").html(options);
//SELECT DEFAULT OPTION
$('#userchosenpromodel option[value="' + prodata[iselected]['id'] + '"]').attr("selected", "selected");
}, 'text'); //$.get
怎么做
prodata也有同样的问题…我有一个请求。完成了,我无法摆脱
谢谢您使用jQuery没有问题,但是使用异步/基于事件的逻辑 不能同步使用异步函数的返回。您必须在回调或从回调调用的函数中使用结果:
request.done(function(){
var proId=$('#userchosenpromodel option[selected="selected"]').val();
console.log(proId);
});
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。为什么不:
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。嗯。。简单的时间问题。console.log在request.done之前运行,因此它将在更改之前记录值。您不能。我很抱歉一直这样回答,但是。。。你不能。Ajax是异步的。如果您想以这种方式编写代码,必须使其同步,并处理由此带来的副作用。否则,请重新组织您的代码,这样您就不需要完成回调之外的proId。您是对的…我不习惯这种类型的算法问题:在函数var请求中=$.get。。。。。我在select://select-default-option$'userchosenpromodel-option[value='+prodata[iselected]['id']+']'中设置了默认选中的选项。attrselected,selected;如您所见,稍后在request.done中,我得到选择的选项…但同时用户可以选择另一个选项…因此我需要得到的不是我预先选择的选项,而是用户选择的选项…知道如何做才能将正确的proId传递给computeUserDimensions函数吗?这一切取决于您的应用程序。根据您所说的,我将阻止用户在第一个请求完成之前发送另一个请求。嗯。。简单的时间问题。console.log在request.done之前运行,因此它将在更改之前记录值。您不能。我很抱歉一直这样回答,但是。。。你不能。Ajax是异步的。如果您想以这种方式编写代码,必须使其同步,并处理由此带来的副作用。否则,请重新组织您的代码,这样您就不需要完成回调之外的proId。您是对的…我不习惯这种类型的算法问题:在函数var请求中=$.get。。。。。我在select://select-default-option$'userchosenpromodel-option[value='+prodata[iselected]['id']+']'中设置了默认选中的选项。attrselected,selected;如您所见,稍后在request.done中,我得到选择的选项…但同时用户可以选择另一个选项…因此我需要得到的不是我预先选择的选项,而是用户选择的选项…知道如何做才能将正确的proId传递给computeUserDimensions函数吗?这一切取决于您的应用程序。根据您所说的,在第一个请求完成之前,我将阻止用户发送另一个请求。请参见我的问题注释中的问题请参见我的问题注释中的问题您对jQuery没有问题,但对异步/基于事件的逻辑。。。你说得对。我习惯了标准的、老套的代码。jQuery没有问题,但是异步/基于事件的逻辑。。。你说得对。我习惯了标准的、老套的代码。