Niestety jest jeszcze jeden problem, chyba wcześniej go nie zauważyłem...
Mianowicie, gdy włączam podstronę "home" (lub jakąś inną tylko nie "shop"), odświeżam całą stronę normalnie, następnie przez ajax przełączam na "shop" i coś kupuję, to nie odświeża mi przycisków.
Natomiast gdy mam włączone "shop" i wtedy odświeżam i kupuję, to już odświeża.
W każdym skrypcie mam:
Kod php:
$objPlayer->session_jsUpdate();
W klasie Player:
Kod php:
public function session_jsUpdate()
{
echo "var tab=new Array(); ";
foreach($this->lastModifiedFields as $field)
{
echo "tab['".$field."']='".$_SESSION[$field]."'; ";
}
$updateString="set(tab); ";
echo $updateString;
}
A w game.php w kodzie JS:
Kod php:
function set(arFieldValues)
{
for(i in arFieldValues)
{
switch(i)
{
case 'money':
player['money']=arFieldValues[i];
$('#header_moneybox p').text(player['money']);
break;
case 'tokens':
player['tokens']=arFieldValues[i];
$('#header_tokensbox p').text(player['tokens']);
break;
}
}
buttonsRefresh();
}
Kod php:
function buttonsRefresh()
{
alert('aaa');
$(".but_box[data-conditions!='']").each(function()
{
var conditions=$(this).attr('data-conditions');
var ok=1;
var split1=conditions.split(';');
var conds='';
for(i=0; i<split1.length; i++)
{
var split2=split1[i].split('=');
if(player[split2[0]]<split2[1])
ok=0;
//poniższa linijka tylko żeby przygotować dane do wyśw. w alercie
conds=conds+player[split2[0]]+'<'+split2[1]+' :: ';
}
alert(conds);
if(ok==0)
$(this).children(':first').next().show().prev().children(':first').hide();
else
$(this).children(':first').next().hide().prev().children(':first').show();
});
alert($(".but_box[data-conditions!='']").length);
}
Te alerty pododawałem, żeby sprawdzić gdzie jest coś źle. Normalnie nie powinno ich być.
I teraz w pierwszym przypadku, gdy nie odświeża przycisków, wyskakuje tylko pierwszy alert.
A gdy odświeża, to wyświetla wszystkie alerty, a ten w .each() po kilka razy (bo jest kilka przycisków). Dlaczego w pierwszym przypadku nie wyświetla pozostałych? Skoro wyświetla pierwszy, to znaczy że funkcja buttonsRefresh() jest wywoływana, a więc i kolejne powinny się wyświetlić.
Struktura html przycisku:
Kod php:
<div class="but_box" data-conditions="money=jakas_kwota;tokens=jakas_kwota">
<a href="php/ajax/sub_shop_buy.php?type=typ_towaru&id=id_towaru" rel="ajax">
<div class="but1"<?php if($_SESSION['money'] < $row['money'] || $_SESSION['tokens'] < $row['tokens']){echo " style=\"display:none;\"";} ?>>
<input class="inp2" type="submit" value="r">";
<div class="but1a"></div>
<div class="but1b"><p>Kup</p></div>
<div class="but1c"></div>
</div>
</a>
<div class="butg"<?php if($_SESSION['money'] >= $row['money'] && $_SESSION['tokens'] >= $row['tokens']){echo " style=\"display:none;\"";} ?>>
<input class="inp2" type="submit" value="r">
<div class="butga"></div>
<div class="butgb"><p>Kup</p></div>
<div class="butgc"></div>
</div>
</div>
.butg to szary, nieklikalny przycisk, który jest pokazywany gdy przycisk ma być dezaktywowany. Wtedy chowany jest .but1, czyli klikalny, zielony przycisk.
Jeśli przycisk ma być aktywowany, to odwrotnie, jak zresztą widać w funkcji buttonsRefresh().
Zakładki