jquery variables globales utilisables partout

Je commence à douter que jquery soit facile à utiliser et flexible. J’ai ceci:

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 

Je voudrais utiliser proId , plus bas dans mon code, après avoir été défini comme ça:

 //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); 

Comment?

Même problème pour les prodata … j’ai request.done que je ne peux pas me débarrasser de

Merci

Vous n’avez pas de problème avec jQuery mais avec une logique asynchrone / basée sur les événements.

Vous ne pouvez pas utiliser de manière synchrone le retour d’une fonction asynchrone. Vous devez utiliser le résultat dans le rappel ou dans une fonction que vous appelez à partir du rappel:

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

Pourquoi ne pas faire:

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

OU alors il n’a pas besoin d’être un Global

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

La deuxième solution dans mon esprit est meilleure. Quoi que vous deviez faire avec proId, construisez vos fonctions pour transmettre ces données. De cette façon, vous n’avez pas besoin de polluer la scope globale. On dirait que vous avez besoin d’une meilleure compréhension de JS.