Diskuze: Otevření JS okna po reload
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
To sice ano, ale háček je v tom, že potřebuji otevřít colorbox okno s parametry, které jsou definované v class=ajax. A to je to co se mi nedaří.
V podstatě po reloadu potřebuji základním souboru vědět že došlo k reloadu z file.php s id tím a tím a otevřít znovu:
<a class="ajax" href="file.php?id=<?php echo $id; ?>">Nové okno</a>
Už rozumiem... A čo znamená "dať vedieť"? Čo sa má stať v tom základnom súbore?
Ze základního souboru otevírám myší pomocí odkazu ( class="ajax"...) colorbox okno, které načte další soubor file.php. V něm změním data pomocí ajaxu, tedy opět něco podobného, abych nemusel přesměrovávat a zapsal při onchange inputu data do DB. Po změně, se provede location.reload(); což provede reload základního souboru a poté potřebuji opět otevřít ten odkaz.
Tedy mu říct, aby po reloadu věděl, že došlo k reloadu, protože při načtení základního souboru se nesmí nic otevřít, až při kliknutí. Pokud došlo k reloadu, tak mu říct, že je potřeba otevřít soubor class=ajax...
Doufám, že jsem to napsal srozumitelně.
Vlastne ... nech už robíš čokoľvek, asi hľadáš toto:
performance.navigation.type // ak nastal reload
? opener.$(element).metoda() // vyber element v parentovi a niečo s ním urob
: null // inak neurob nič, prípadne čokoľvek iné
Nakonec jsem to vyřešil takto:
$(document).ready(function() {
<?php
if($_SESSION['o'] == "ano"){
$id = $_SESSION['id'];
?>
$("#o<?php echo $id; ?>").trigger("click");
<?php
}
?>
});
asi to není nejčistší... Jak by to vypadlo v případě tvého řešení?
performance.navigation.type // ak nastal reload
? opener.$(element).metoda() // vyber element v parentovi a niečo s ním urob
: null // inak neurob nič, prípadne čokoľvek iné
Úprimne? Hlavne by som to nerobil tak, ako to skúšaš. Veď v tom súbore update.php kde vykonávaš SQL update príkaz, zároveň pošli do prehliadača odpoveď s novým počtom. Veď to AJAX volanie doslova čaká nejakú odpoveď... Takže riešenie je zhruba takéto: v update.php pridaj header 'application/json', po vykonaní update zisti SQL príkazom nový počet, a s echo json_encode() pošli do modálneho okna odpoveď s novým počtom. A tam v callbacku miesto ignorovania odpovede a volania location.reload radšej updatuj DOM model:
function UpdateRecord(id,a,data,name){
jQuery.ajax({
type: "POST",
url: "update.php",
data: 'id='+id+'&a='+a+'&'+name+'='+data,
cache: false,
success: function (response) {
$('selektor').text(response.count)
// alert("Záznam byl úspěšně změněn.");
// location.reload();
}
});
}
Tvoje řešení dává do jisté míry lepší smysl než to moje. Nicméně i na základní stránce se zobrazují údaje, které jsou na stránce file.php. Tedy kompletní reload udělá i to, že se na základní stránce načtou nové údaje.
Každopádně děkuji za komentář.
A načo načítavaš celú stránku kvôli zmene jediného čísla? Na kliknutie kvôli editácii neotváraj nové okno, to je zhovadilosť. Otvor modálne okno/div v tej istej stránke a číslom z AJAX odpovede updatni aj element modálneho okna, aj element vo výpise pod modálnym oknom.
Zobrazeno 10 zpráv z 10.