« 1 2 »
Autor Zpráva
Mario92
Profil
Zdravím.
Začínám s JS a moméntálně se už dlouhou dobu nemůžu dostat přes problém jak vložit PHP do JS.
Mám JS funkci ,která se spoušti po události onclick
funkci definuju interne na začátku hlavní stránky a funkce mi funguje jenomže se do db zapisuje ,ikdyž funkce není volaná prostě při úplně každém refreshi nebo načítání jiné stranky.
Nevím v čem je chyba ,ale jenom hádám ,že to mám tu funkci nějak špatně zapsanou..
Předem děkuji.

function odesli_hodnoceni(box)
 {
    box.style.display=''; 
      
  <?php
          pripoj_db();
          mysql_query("INSERT INTO ................
    ?>  
 }
Alphard
Profil
Nejde, je to blbost. Stačí Nejčastější potíže s PHP (FAQ) » Jak přenést proměnnou z javascriptu do PHP jako vysvětlení, v čem je problém?
ShiraNai7
Profil
Mario92:
PHP se provádí už na serveru, JS až v prohlížeči. Pokud chceš pomocí JS provádět akce na serveru, použij ajax (třeba s pomocí jquery).
Mario92
Profil
No jasně.Teď se sám divím ,že jsem mohl takovou blbost napsat.Teoreticky problém samozřejmě chápu ,ale prakticky to bude horší.
O AJAXu nevím vůbec nic ,takže napsat něco co by fungovalo bude pro mě problém velký jak obličej tlustého kokršpaněla.Mohli by jste mě nějak nasměrovat ,nebo nastínit řešení?
ShiraNai7
Profil
Mario92:

Příklad (v případě použití jquery):

javascript
function odesli_hodnoceni(box) 
{ 
    box.style.display='';
    $.get(
        'ajax_akce.php',
        { zde data, co chceš poslat, jako literal js objekt.. nevím odkud bereš to hodnocení },
        function() { funkce provedená v případě, že vše proběhne ok }
    );
}

ajax_akce.php

<?php

PHP kód pro zpracování hodnocení.. pokud výše v JS pošleš nějaká data, budou dostupná v $_GET
Mario92
Profil
Mockrát děkuju.. ;-)
Radek9
Profil
ShiraNai7:
Kvůli takové prkotině tahat do stránky jQuery? Na tohle ani není potřeba AJAX, stačí Image:
function odesli_hodnoceni(box){ 
  box.style.display = ""; 
  var img = new Image();
  img.src = "script.php?hodnoceni="+hodnoceni;
}
_es
Profil
Radek9:
Na tohle ani není potřeba AJAX, stačí Image:
A dokonca netreba ani JS, na odoslanie hodnotenia stačí obyčajný odkaz, nasmerovaný do skrytého iframe.
Chamurappi
Profil
Reaguji na _es:
nasmerovaný do skrytého iframe.
A nebo vedoucí na zdroj, který uloží hodnocení a vrátí hlavičku 206 No Content.
ShiraNai7
Profil
_es, Radek9:
... pokud jQuery nevyužije na více věcí, tak ať si to řeší jinak. Moje řešení je příklad a cesta s použitím jQuery je nejjednodušší. Ještě před 2 hodinami cpal PHP mezi javascript a divil se, že to nefunguje tak, jak chtěl. Rady s iframe nebo zneužitím Image() (kde nelze jednoduše zpracovat odpověď skriptu) nepovažuji za dobré.
_es
Profil
Chamurappi:
vedoucí na zdroj, který...
A no ale z pohľadu návštevníka sa najprv začne načítavať iná stránka, či nie? Alebo, čo ak serverový skript náhodou nebude správne fungovať?

ShiraNai7:
Rady s iframe nebo zneužitím Image() (kde nelze jednoduše zpracovat odpověď skriptu) nepovažuji za dobré.
Prečo? Kde Mario92 tvrdil, že chce pracovať s odpoveďou servera? Riešenie s iframe predsa umožňuje s odpoveďou servera pracovať veľmi jednoducho.
Radek9
Profil
ShiraNai7:
kde nelze jednoduše zpracovat odpověď skriptu
K čemu zrovna tady potřebuješ odpověď? Šlo jen o odeslání hodnocení. Ale pokud na tom trváš:
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP");
xhr.open("GET", "script.php?hodnoceni="+hodnoceni, true);
xhr.onreadystatechange = function(){
  if(this.readyState===4){
    if(this.status===200){
      alert(this.responseText);
    }
    else{
      //error
    }
  }
};
xhr.send();
ShiraNai7
Profil
_es:
Riešenie s iframe predsa umožňuje s odpoveďou servera pracovať veľmi jednoducho.
Zbytečně složité. Použitím ajaxu bude řešení čistě javascriptové a nebudou se muset do kódu přidávat nebo dynamicky vytvářet rámce. Úplně ideální je mít hodnocení ajaxově a jako fallback to mít obalené ve formuláři.

Radek9:
Protože odeslat hlasování a tvářit se, že proběhlo v pořádku bez ohledu na reálný výsledek, je špatně.
_es
Profil
ShiraNai7:
„Riešenie s iframe predsa umožňuje s odpoveďou servera pracovať veľmi jednoducho.“
Zbytečně složité.
Čo je zložité na <iframe onload="kód reagujúci na prijaté dáta"... alebo objektIframu.onload=funkcia?
ShiraNai7
Profil
_es:
Proč k tomu zneužívat rámce, když to jde udělat čistým způsobem? Nechápu, co máte proti ajaxu. Musíte být za každou cenu v opozici?
joe
Profil
Zase téma, co mě trošku pobavilo :-) Musím se zastat ShiraNai7, protože napsal funkční a správné řešení a místo toho, aby ho třeba někdo doplnil (s řešením bez použití jQuery), tak jste se tu na něj skoro všichni sesypali.

Radek9:
Na tohle ani není potřeba AJAX, stačí Image:
Ne nestačí, nemáš žádnou odpověď, jak hlasování nebo cokoli jiného dopadlo.

Kvůli takové prkotině tahat do stránky jQuery?
A proč ne? Na stránce bez pochyby určitě nezůstane jen jediné AJAXové volání, může přibýt další a to už by znamenalo pro začátečníka další komplikace s duplikováním kódu a vedlo by to ke špatnému způsobu řešení, i když to nějak fungovat bude. Mohou přibýt animace, práce s dokumentem apod., tak proč se s tím psát ručně, když se mi snaží framework pomoci?

_es:
Prečo? Kde Mario92 tvrdil, že chce pracovať s odpoveďou servera?
Nikde to možná netvrdil, ale každopádně to je jediné správné řešení, jak to dělat. Uživatel má mít po každé takové a podobné akci zpětnou vazbu.
_es
Profil
joe:
to už by znamenalo pro začátečníka další komplikace s duplikováním kódu a vedlo by to ke špatnému způsobu řešení, i když to nějak fungovat bude.
Ako súvisí „duplikovanie kódu“ s tým, či sa v kóde jedna objekt/funkcia používať bude alebo nebude? Ako z nepoužitia jQuery nutne vyplýva zlé riešenie? Obvykle nejaké „nejako fungujúce“ JS kódy vznikajú skôr práve pri použití jQuery a nedostatkoch v pochopení samotného JS.

Ne nestačí, nemáš žádnou odpověď, jak hlasování nebo cokoli jiného dopadlo.
Nie je pravda, že sa žiadna odpoveď nedá získať. Obrázok má udalosti onload a onerror, dá sa prečítať jeho šírka a výška.

třeba někdo doplnil (s řešením bez použití jQuery)
Čo [#7] a [#12]? Použitie odkazu je snáď jasné už z textového popisu.

ShiraNai7:
Proč k tomu zneužívat rámce, když to jde udělat čistým způsobem?
Trebárs preto, aby to fungovalo aj bez JS.
joe
Profil
_es:
Trebárs preto, aby to fungovalo aj bez JS.
Reaguju sice na to, co nebylo pro mě, ale trochu si protiřečíš. Bez JS, jak přece všichni víme, ti nebude fungovat kód v událostech (viz [#14])

Ako súvisí ‚duplikovanie kódu‘...“
Vezmi si například vytváření XMLHttpRequestu, kdyby se rozhodl ho použít desetkrát, pravděpodobně vezmé kód z [#12] a desetkrát ho zkopíruje. Kdyby v něm byla chyba, musí ho opravovat zase desetkrát. Když použije framework, má daleko menší riziko na to, že někde udělá chybu.

Nie je pravda, že sa žiadna odpoveď nedá získať
Získat se dá, ale k čemu tu pak máme objekt XMLHttpRequest, když ho vůbec ani používat nemusíme a můžem použít Image?

Čo...
To jsi vytrhl z kontextu, příklady tu jsou, ale vrhli jste se na něj, jako by jQuery bylo to nejhorší možné řešení.
Chamurappi
Profil
Reaguji na joa:
Na stránce bez pochyby určitě nezůstane jen jediné AJAXové volání“ … „Mohou přibýt animace, práce s dokumentem apod.
To nevíme. U mnoha začátečníků je pro uživatele lepší, když nevědí, jak dělat animace :-)

další komplikace s duplikováním kódu
Děláš, jako kdyby neexistovalo nic mezi kopírovanými příkazy a použitím frameworku. Stačilo by použít krátkou funkci.

Uživatel má mít po každé takové a podobné akci zpětnou vazbu.
Může mu ten vytvořený <img> zobrazit. Nebo zjistit jeho rozměry a podle nich něco napsat.

k čemu tu pak máme objekt XMLHttpRequest, když ho vůbec ani používat nemusíme a můžem použít Image?
Tenhle druh otázek jsem nikdy nepochopil. Copak sama existence implikuje optimálnost?


Reaguji na _es:
A no ale z pohľadu návštevníka sa najprv začne načítavať iná stránka, či nie?
Stávající stránka nezmizí.

Alebo, čo ak serverový skript náhodou nebude správne fungovať?
Tak se nalistuje nová stránka s chybou. V případech, kdy je pravděpodobnost úspěchu hodně vysoká, mi to připadá jako optimální postup.


Reaguji na ShiraNaiho7:
nebudou se muset do kódu přidávat nebo dynamicky vytvářet rámce
Ten rámec tam může být pořád a klidně i viditelný. Může to celé běžět i bez JavaScriptu.
ShiraNai7
Profil
_es:
Trebárs preto, aby to fungovalo aj bez JS.

viz #18

> ShiraNai7:
> „Úplně ideální je mít hodnocení ajaxově a jako fallback to mít obalené ve formuláři.

Chamurappi:
Ten rámec tam může být pořád a klidně i viditelný. Může to celé běžět i bez JavaScriptu.

Na to pak ale stačí formulář.
_es
Profil
Chamurappi:
Stávající stránka nezmizí.
Ale do prijatia odpovede servera prehliadač indikuje načítavanie inej stránky.

joe:
trochu si protiřečíš. Bez JS, jak přece všichni víme, ti nebude fungovat kód v událostech
To samozrejme nebude, ale bude fungovať odoslanie hodnotenia, z kontextu by malo byť snáď každému jasné, že to tak bolo myslené. Okrem toho môže byť iframe viditeľný a zobraziť odpoveď servera - tiež bez použitia JS.

ShiraNai7:
Na to pak ale stačí formulář.
Alebo aj obyčajný odkaz ([#8]), ale to je už znovuvynachádzanie kolesa. Prečo cez JS simulovať chovanie odkazu či formulára a rovno ich nepoužiť?
ShiraNai7
Profil
_es:
Prečo cez JS simulovať chovanie odkazu či formulára a rovno ich nepoužiť?

Výhoda JS - nemusí se načítat celá stránka znovu.
A ano.. jde použít rovnou formulář. Není důvod šaškovat s nějakým rámcem.
_es
Profil
ShiraNai7:
Výhoda JS - nemusí se načítat celá stránka znovu.
Ale pri smerovaní odkazu či formulára na iframe sa predsa nová stránka do celého okna nenačíta.

jde použít rovnou formulář. Není důvod šaškovat s nějakým rámcem.
A kam sa potom bez rámca odpoveď zo serveru načíta, tak aby sa do celého okna nenačítala nová stránka?
ShiraNai7
Profil
_es:
A kam sa potom bez rámca odpoveď zo serveru načíta, tak aby sa do celého okna nenačítala nová stránka?
Způsobů jak upozornit na započítané hlasování je snad milión.

Ale pri smerovaní odkazu či formulára na iframe sa predsa nová stránka do celého okna nenačíta.
Stejně jako s ajaxem, který je pro tento účel dělaný. Tvou posedlost rámcemi nechápu. V životě jsem neviděl např. anketu, kde by se hlasování odesílalo a výsledek zobrazoval do nějakého iframe.
_es
Profil
ShiraNai7:
Způsobů jak upozornit na započítané hlasování je snad milión.
Napríklad, nejaké konkrétne riešenie bez JS s formulárom a bez rámcov kde sa po odoslaní formulára nenačíta nová stránka do celého okna?

V životě jsem neviděl např. anketu, kde by se hlasování odesílalo a výsledek zobrazoval do nějakého iframe.
Ja som zase videl veľa ankiet, ktoré fungovali aj bez JS a JS bolo trebárs len na tú spätnú väzbu.

Tvou posedlost rámcemi nechápu.
Ja som len navrhol jedno riešenie a reagujem na vymýšľanie neexistujúcich „komplikácií“.
ShiraNai7
Profil
_es:
Ja som zase videl veľa ankiet, ktoré fungovali aj bez JS a JS bolo trebárs len na tú spätnú väzbu.
A kombinace ajaxu a formuláře snad nefunguje bez JS? Taková kombinace funguje s JS i bez JS a v obou případech včetně zpětné vazby.
_es
Profil
ShiraNai7:
A kombinace ajaxu a formuláře snad nefunguje bez JS?
Znovu: Tvrdil si, že netreba „šaškovať s rámcom“? Kam sa bez rámca a bez JS odpoveď servera na formulár načíta tak, aby nedošlo k načítaniu odpovede servera do celého okna? Riešenie [#9] spôsobí neexistenciu spätnej väzby. Načítanie do nového okna asi veľmi praktické nie je.
ShiraNai7
Profil
_es:
Co jsem psal o novém okně? Rešení ajax + fallback formulář proběhne jedním z těchto způsobů:

1) s JS se odešle hodnocení ajaxem a zpětnou vazbu lze zobrazit libovolně .. třeba přímo v anketě, či jakkoliv jinak
2) bez JS fomulář nasměruje na skript, který pak přesměruje zpět s nějakými daty (ať už v GET či sessions) a zobrazí se zpětná vazba; taky to může zpracovávat ta stejná stránka

Kam sa bez rámca a bez JS odpoveď servera na formulár načíta tak
viz 1)
_es
Profil
ShiraNai7:
bez JS fomulář nasměruje na skript, který pak přesměruje zpět s nějakými daty (ať už v GET či sessions) a zobrazí se zpětná vazba; taky to může zpracovávat ta stejná stránka
Čiže nastane zrušenie existujúcej stránky a načíta sa do celého okna odpoveď servera a potom sa znovunačíta pôvodná stránka? Alebo musí server odpovedať znovu-vygenerovanou celou stránkou? A to len preto, aby sa nepoužil „zlý“ iframe?
ShiraNai7
Profil
_es:
Ne.. formulář je záložní řešení pro uživatele bez JS (kterých je tak 0,25-2%). U "zbytku" uživatelů proběhne ajaxová verze.
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0