Autor Zpráva
gmvasek
Profil
Zdravím, píšu si aplikaci na tahání vzdálených dat pomocí ajaxu a PHP, používám mootools. Ví někdo jak v JS fungují globální proměnné? (Googlit jsem zkoušel.) Protože tento kód píše do výsledných polí undefined a 0:
var levels;
var skills;
var levelinfo;
var html;

function handleResponse(response)
{
	if(response.indexOf('@') == -1)
	{
		$('error').setStyle('display', 'block');
		$('loading').setStyle('display', 'none');
		$('error').set('text', response);
		
		['rsnick', 'ajax-submit'].each(function(idecko){
			$(idecko).disabled = false;
		});
	}
	else
	{
		skills = new Array('total', 'attack', 'defence', 'strength', 'hitpoints', 'ranged', 'prayer', 'magic', 'cooking', 'woodcutting', 'fletching', 'fishing', 'firemaking', 'crafting', 'smithing', 'mining', 'herblore', 'agility', 'thieving', 'slayer', 'farming', 'runecrafting', 'hunter', 'construction', 'summoning', 'combat');
		levels = response.split('@');
		
		for(i=0; i<=25; i++)
		{
			levelinfo = levels[i].split(',');
			html = '<span class="tooltip">' + levelinfo[0] + '</span>';
			$(skills[i] + '-result').set('html', html);
			$(skills[i] + '-result').addEvent('mouseenter', function() {
				var obj=new ProgressBar(levelinfo[4]);
				$('progressbar').appendChild(obj);
				$('skillname-detail').set('html', ucfirst(skills[i]));
				$('skillxp-detail').set('html', levelinfo[1]);
				$('skillrank-detail').set('html', levelinfo[2]);
				$('skilldiff-detail').set('html', levelinfo[3]);
			});
			$(skills[i] + '-result').addEvent('mouseleave', function() {
				['skillname-detail', 'skillxp-detail', 'skillrank-detail', 'skilldiff-detail', 'progressbar'].each(function(idecko){
					$(idecko).set('html', '');
				});
			});
		}
		
		$('loading').setStyle('display', 'none');
		['rsnick', 'ajax-submit'].each(function(idecko){
			$(idecko).disabled = false;
		});
//		var tooltips = new Tips($$('.tooltip'), { 'fixed': true, 'offsets': { 'x': 16, 'y': 16 }});
	}
}


(tato funkce slouží jako callback pro ajaxový požadavek)
gmvasek
Profil
Prosím, ví někdo?
Chamurappi
Profil
Reaguji na gmvaska:
Ví někdo jak v JS fungují globální proměnné?
Úplně normálně. Chybu hledej ve svých skriptech, nikoliv v principiálních nedostatcích jazyka.

tento kód píše do výsledných polí undefined a 0
Do kterých výsledných polí?

Obvyklými ladicími postupy (odmazávání, vypisování mezivýsledků) bys měl být schopen lokalizovat přesné místo, kde dostáváš, co dostávat nechceš. Jestli na to nepřijdeš, pomohla by živá ukázka.
gmvasek
Profil
Našel jsem, že proměnné fungují jako globální, když jsou definovány vně funkce...
To kam to píše undefined je tato část kódu:
$(skills[i] + '-result').addEvent('mouseenter', function() {
				var obj=new ProgressBar(levelinfo[4]); // vypíše 0
				$('progressbar').appendChild(obj);
				$('skillname-detail').set('html', ucfirst(skills[i])); // vypíše Undefined díky ucfirst
				$('skillxp-detail').set('html', levelinfo[1]); // vypíše 0
				$('skillrank-detail').set('html', levelinfo[2]); // vypíše 0
				$('skilldiff-detail').set('html', levelinfo[3]); // vypíše 0
			});

Myslím si, že se ty promněnné skills a levelinfo nedostanou do té funkce... ale nevím jak je tam mám dostat.
Měsíček
Profil
Reaguji na gmvasek:

"Našel jsem, že proměnné fungují jako globální, když jsou definovány vně funkce... "

To jsou mi věci. Spíše tam půjde o klíčové slovo var.

<script type="text/javascript">
/**
  * Definování proměnných
  */
  var 
    a = 10; var _1a;
    b = 11; var _1b;
/**
  * Definování funkcí
  */
  function _a ( ) {
    var _1a = 3;
    alert(a+_1a);
  }
  function _b ( ) {
    _1b = 3;
    alert(b+_1b);
  }
/**
  * Volání funkcí
  */
  _a (); // 13
  _b (); // 14
/**
  * Volání proměnných definovaných či deklarovaných
  * ve funkci.
  */
  alert(_1b); // 3
  alert(_1a); // undefined ** 
</script> 
** Pokud vymažeš deklaraci (nahoře) var _1a; tak celkově bude prázdná, protože platnost této proměnné bude pouze ve funkci, protože jen ve funkci jsi ji deklaroval jako "var".
gmvasek
Profil
Díky, už jsem to rozchodil...
Toto téma je uzamčeno. Odpověď nelze zaslat.

0