Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery全局变量在任何地方都可用_Jquery - Fatal编程技术网

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

我开始怀疑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 < 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没有问题,但是异步/基于事件的逻辑。。。你说得对。我习惯了标准的、老套的代码。