Avatar
Taskkill
Redaktor
Avatar
Taskkill:

Zdravím,
vznikl mi tento problém: potřebuji přečíst něco z MySQL databáze, radši než PHP mám javascript tak jsem původně pomýšlel na něj, ale na netu to lidé nedoporučují, rezignoval jsem tedy -> mám index.php/html prozatím oba dva...v něm je veškerý obsah javascriptem z externího souboru provadím animace na kliknutí atd..prostě frontend aplikace...jedním z klíčových prvků ale je flipswitch ten je třeba při každém načtení stránky nastavit do polohy On nebo OFF ale vždy přesně podle databáze...te­dy...vytvořil jsem read.php ten přijímá z externího js souboru metodou POST nějaké argumenty jako z jaké tabulky co má číst atd...PHP je vezme přečte z databáze a uloží poslední dle času řazenou hodnotu On nebo OFF ale nyní nemůžu jen tak echem z PHP javascriptovat to nastavení konkrétního switche do konkrétní stažené polohy, protože veškeré skripty se budou provádět na read.php a to je mi k ničemu..znám způsob jak ajaxem POSTnout a taky jak ajaxem vytvořit XMLHttpRequest který první echo z konkrétního php souboru stáhne zpět do javascriptového souboru ale já potřebuju vědět jak to udělat najednou protože když je to na dva kusy nefunguje to --- proměná neobsahuje hodnotu On nebo OFF když execnu ten druhej ajax zkrátka echne mi to prázdno... takže definice je asi tato... javascriptem POSTnout do PHP souboru nějaká data a na konci PHP pravděpodobně zase echnout hodnotu ..na tu už bude čekat javascript v externí souboru a provede co mu zadám..tedy jako zavolat a počkat na odpověď ..předem díky za váš čas a snahu

 
Odpovědět 20.8.2014 13:48
Avatar
Odpovídá na Taskkill
Michal Žůrek (misaz):

nakonec jsem se v tom ztratil. Funguje ti ten PHP script? Pošli kód AJAXu?

Nahoru Odpovědět  +1 20.8.2014 13:55
Nesnáším {}, proto se jim vyhýbám.
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Taskkill:

tímhle způsobem POSTuju z js do php

$.ajax({
               type: "POST",
               url: "read.php",
               data: 'item=' + item,
               cache: false,
               success: function (html) {
                   alert("WIN");
               }
           });

a tohle mám v php

<?
require ("pripojeni_db.php");
$result = mysql_query("SELECT Value FROM $item order by Time desc limit 1");
                        while ($row = mysql_fetch_array($result)) {
                      $value    = $row["value"];

                                        }
echo $value;
?>

abych to nějak zjednodušil..pro­blém vzniká v tom že ten druhej ajax :

function recieveVal() {
        function reqListener () {
            console.log(this.responseText);
        }
        var oReq = new XMLHttpRequest();
        oReq.onload = function() {
            alert(this.responseText);
        };
        oReq.open("get", "read.php", true);
        oReq.send();

    }

    function selSetter() {

    }

funguje na principu force connect..žádný čekání na to až php něco udělá to ajax je iniciátorem a já bych potřeboval z tohohle hlediska spíš opak ..POST ať spouští ajax okej...ale návratovou hodnotu z PHP, to ať radši iniciuje php, jinak tam v té proměnné $value nic nebude žejo

Editováno 20.8.2014 14:01
 
Nahoru Odpovědět 20.8.2014 14:00
Avatar
Odpovídá na Taskkill
Michal Žůrek (misaz):

oReq.onload se ti zavolá ihned po zavolání metody open nebo send (teď nevím přesně, ale jedné z těch), potřebuješ obsluhovat onreadystatechange. To se zavolá několikrát, jakmile bude readyState == 4 a statusCode == 200 tak tam máš data.

Nahoru Odpovědět 20.8.2014 14:05
Nesnáším {}, proto se jim vyhýbám.
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Taskkill:

takže ty data tam budou i když ten POST vlastně dělá něco úplně nezávisle na tohle...přijde mi to dosti nezávislý..dokonce jsem měl pocit že na sebe tyhle dvě "relace" ani nevidí..po pravdě ale nevím jak mám udělat to co mi doporučuješ..prosím ještě to trochu rozveď abych byl alespoň schopný si to nějak vyhledat..

 
Nahoru Odpovědět 20.8.2014 14:09
Avatar
Odpovídá na Taskkill
Michal Žůrek (misaz):

co ti vipíše ten alert v druhém kódu? Undefined? null? něco podobného?

v druhém kódu máš obsluhu události onload pro ten requst, který tam skládáš. uvnitř te obsluhy pak kontroluješ responseText,a le když si tam dáš breakpoint zjistíš, že v nich nic není, rpotže request je sice načtený (onload) ale nemá data ze serveru, proto jsem ti psal, že místo onload máš obsluhovat onreadystatechange, tam mít podmínku jestli je statusCode == 200 a vtom případě teprve zpracovat data.

Nahoru Odpovědět 20.8.2014 14:12
Nesnáším {}, proto se jim vyhýbám.
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Taskkill:

takže něco takového? -->

var oReq = new XMLHttpRequest();
         oReq.onreadystatechange = function() {
//A sem teď if?
             alert(this.responseText);
         };
         oReq.open("get", "read.php", true);
         oReq.send();

zkus to trochu polopatě..to co tam dělám s ajaxem je mi už samo o sobě z 75% tajemstvím ..ale bohužel se bez toho neobejdu

Editováno 20.8.2014 14:23
 
Nahoru Odpovědět 20.8.2014 14:22
Avatar
Odpovídá na Taskkill
Michal Žůrek (misaz):

jo

if (oReq.statusCode == 200) {
    // alert
}
Nahoru Odpovědět 20.8.2014 14:27
Nesnáším {}, proto se jim vyhýbám.
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Taskkill:

tak to jsem teď provedl a mám několik pochybností, jednak takhle zapsaná podmínka znemožní provedení toho co je uvnitře, protože stačí aby jednou nebylo (oReq.statusCode == 200) rovno true a jelikož tu není žádný čekání a pokus o opakování tak se to prostě neprovede...jednak když jsem tam dal tohle

if (oReq.statusCode == 200) {
                alert(this.responseText + "tohleto?");
            }
            else {
                alert(oReq.statusCode);


            }

tak v else alert vyhodí undefined... což znamená že těch 200 nemůže mít nikdy když je undefined nakonec naprosto globální problém ...tenhle příkaz jen přimějeread.php aby mi vydal první echo co tam je napsaný, ale jelikož nic nepředává sám ..žádný item ...tak $value který jsem tam chtěl echnout bude stejně pořád prázdný...co s tím?

 
Nahoru Odpovědět 20.8.2014 14:38
Avatar
Odpovídá na Taskkill
Michal Žůrek (misaz):

kód 200 samozřejmě je a funguje, tady máš odkaz k dokumentaci na w3c http://www.w3.org/…6-sec10.html#… opětovně ti to zavolá JavaScript, mimo podmínku si do konozle vypieš

console.log("Zavolalo se to");

a podívej se kolikrát ti totam vypíše. V tom že 200 tam nemusí dojít máš částečně pravdu,ještě tam může být třeba 30X (při přesměrování) nbeo 40X při chybě. Ale ten status code tam nějaký bude.

Nahoru Odpovědět 20.8.2014 16:48
Nesnáším {}, proto se jim vyhýbám.
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Taskkill:

tak jsem zjistil čím to bylo, že se ti nikdy neprovedlo a že statusCode je undefined... je to jenom status... tedy kód má vypadat takhle

if (oReq.status == 200) {
                 alert(this.responseText + "tohleto?");
             }

pak to vypisuje echo z phpčka...problém je ale v tom, že stále nefunguje to co jsem říkal už na začátku..že tímto zpusobem bude echovat prázdnou hodnotu protože druhej ajax nepředává phpčku parametr, který by kod použil pro kontaktování databáze...co doporučuješ?

 
Nahoru Odpovědět 21.8.2014 10:41
Avatar
Odpovídá na Taskkill
Michal Žůrek (misaz):

možná jsem si domyslel o co se snažíš. Děláš nějaký přepínátko (toogleswitch), které bude měnit hodnotu na serveru. Do databáze budeme ukládat jedničku nebo mínus jedna. V scriptu PHP (change.php abychom zachovali rozumné názvy) vezmeme tu hodnotu vynásobíme -1 a uložíme novou. V JavaScriptu AJAXem zavoláme tento script.

var req = new XMLHttpRequest();
req.open("GET", "change.php");
req.send();
// změníš hodnotu u uživatele

pak si ještě dáš PHP script read.php, který ti tu jedničku nebo mínus jedna vrátí a v JavaScriptu si to načteš.

var req = new XMLHttpRequest();
req.open("GET", "change.php");
req.onreadystatechange = function () {
    if (req.status == 200) {
        if (req.responseText == "1") {
            // posuneš tlačíto na ON
        } else  {
            // posuneš tlačíto na OFF
        }
    }
}
req.send();
Nahoru Odpovědět 21.8.2014 11:26
Nesnáším {}, proto se jim vyhýbám.
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Taskkill:

myslím, že jsi přesně pochopil co mám na mysli...jen to ještě upřesním aby to bylo jisté...ošetřuji situaci kdy např. mám server s databází a apachem a javou ...do databáze se připojuje java která když vidí že nějaká položka je nastavená na On tak třeba rozsvítí světlo ... tohle je jasný nechci se v tom zamotat...ale teď jde o webovou aplikaci kterou budeš ty světla ovládat.. tu aplikaci může mít v mobilu nebo kompu deset lidí..a je nutný aby když jeden udělá změnu aby se to změnilo všem..takže zatím pracuju jen na tom aby se to správně nastavilo podle reálných stavů světel při refreshnutí stránky ...taky jasný..zase se do toho nechci zamotat..ale shrnuto a podrtrženo znamená to, že nejenom, že bude togle switch měnit stav v databázi...to už mimochodem v pohodě běhá...ale navíc se ten switch musí nějak dozvědět stav v databázi řekněme jak při načtení tak každý 3 sekundy.. a na to potřebuju aby js zavolal phpčko předal mu postupně všechny přepínače který na stránce jsou..protože nikdo neříká že musí být všechny na webu co jsou v databázi a pak podle toho jeden za druhým nastavil do polohy podle databáze...vlastně jsem před nějakou dobou našel příklad tady http://www.w3schools.com/…database.asp a myslím, že se to nejvíc podobá tomu co chci udělat..a navíc se to shoduje s tím co jsi teď napsal ty..takže bych řekl, že mě chápeš dobře

 
Nahoru Odpovědět 21.8.2014 11:36
Avatar
Odpovídá na Taskkill
Michal Žůrek (misaz):

a co teď řešíme?

Btw. hledáš WebSockets API

Nahoru Odpovědět 21.8.2014 11:43
Nesnáším {}, proto se jim vyhýbám.
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Taskkill:

No...teď přepisuju staré nepoužitelné řešení tím novým založeným na tom co píšeš ty a co je v tom DEMU na W3School ...když bude fungovat v pohodě, když ne ...asi se podívám na to co dělá WebSocket API, když říkáš, že tohle hledám. každopádně si moc cením tvého zájmu a času, který jsi mi věnoval. Zatím velké Díky.

 
Nahoru Odpovědět 21.8.2014 11:56
Avatar
Odpovídá na Taskkill
Michal Žůrek (misaz):

WebSocket ti umožní komunikaci se serverem real-time. Až budeš mít připojených více klientu, aby se když jeden změní hodnotu, to projevilo všem.

Nahoru Odpovědět 21.8.2014 12:00
Nesnáším {}, proto se jim vyhýbám.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.