Autor | Zpráva | ||
---|---|---|---|
vazo Profil |
#1 · Zasláno: 23. 12. 2012, 15:19:45
Ahoj, snažím se si naprogramovat svůj malý e-shop (zatím jen tedy přidávání zboží do košíku). Pokouším se využívat javascript (i když jsem v něm začátečník) a to proto, jelikož nechci, aby se po každém zmáčknutí tlačítka a jiných akcí načítala vždy celá stránka znova... Po zadání počtu kusů a zmáčknutí tlačítka "vložit do košíku", vyběhne popup okno, které informuje o přidání zboží do košíku. Do této chvíle vše funguje v pohodě, ale když chci přidat to samé zboží, které už v košíku mám, tak se do košíku nic neuloží. Myslím si, že to je proto, jelikož používám ID:
...id='link_content<?php echo $row['id_zbozi'];?>'... Mohl by jste mi pls někdo poradit, jak tuto nedokonalost odstranit? Předem moc díky! ;-) |
||
1Pupik1989 Profil |
#2 · Zasláno: 23. 12. 2012, 21:25:20
mrkni na ajax. pro případ že je javascript vyplý stejně použij php pro odeslání na stránku. headerem přesměruješ zpět.
|
||
Časová prodleva: 4 dny
|
|||
vazo Profil |
#3 · Zasláno: 27. 12. 2012, 18:00:57
Ok, na ajax kouknu... ale stejnak, mohl by mi někdo vysvětlit, proč po druhé to samé zboží (bez refreshe stránky) do košíku nelze vložit?
Btw možná to je příkazem "onclick" ?!? Má javascript nějaké omezení, např. že nějaké hodnoty(příkazy) načítá(dají se použít) jen jednou? <a href='okno.php' id='link_content<?php echo $id_zbozi;?>' onclick="send_request('output_div','text_content<?php echo $id_zbozi; ?>','kusu<?php echo $id_zbozi; ?>')"> |
||
Davex Profil |
#4 · Zasláno: 27. 12. 2012, 18:40:20
vazo:
„Btw možná to je příkazem "onclick" ?!?“ Ne. JavaScript se spouští v prohlížeči a v něm bude něco takového. <a href='okno.php' id='link_content12345' onclick="send_request('output_div','text_content12345','kusu12345')"> Nevím, kde je definována funkce send_request() , co dělá a co vrací za hodnotu, ale na první pohled není problém v jejím volání.
Je nějaká chyba v chybové konzoli? |
||
_es Profil |
#5 · Zasláno: 28. 12. 2012, 18:41:05
vazo:
Na stránke by nemali byť elementy s rovnakým id , možno je problém v tom.
|
||
vazo Profil |
Možná bude nejlepší, když sem dám veškeré zdrojové kódy... (Vím, že to asi není úplně šťastně řešené a že zde jsou zbytečné řádky kódu navíc, je to totiž tak trochu "poslepované" z různých zdrojových kódů, proto uvítám jakékoliv návrhy a pomoc na zlepšení, zjednodušení a a bych mohl konečně víckrát odeslat to samé zboží do košíku bez refreshe stránky.)
Předem moc díky za rady vedoucí k odstranění problému. index.php <? Ob_start(); include("config.php"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xml:lang="cs" lang="cs" xmlns="www.w3.org/1999/xhtml"> <head> <title>E-shop</title> <meta name="resource-type" content="document"/> <meta http-equiv="content-type" content="text/html; charset=windows-1250" /> <meta http-equiv="content-language" content="cs" /> <script type="text/javascript" src="functions.js"></script> <script type="text/javascript" src="ajax.js"></script> <link media="screen" rel="stylesheet" href="colorbox.css" /> <script src="code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> <script src="jquery.colorbox-min.js" type="text/javascript"></script> <script type="text/javascript"> $(function() { <?php for ($i=1;$i<=30;$i++) { ?> $('#link_content<?php echo $i;?>').colorbox({opacity:0.3}); <?php } ?> }); </script> </head> <body> <div id="obsah"> <?php $pocitadlo=0; $id_k=1; $query = MySQL_Query("SELECT * FROM Zbozi WHERE `id_kategorie`='$id_k' ") or die (mysql_error()); while($row=mysql_fetch_array($query)) { $pocitadlo = $row['id_zbozi']; echo $row['cena']; echo $row['nazev']; echo $row['popis']; echo $row['zaruka']; ?> Kusů: <?php if (!isset($kusu)) { $kusu=1; } ?> <form> <input type="text" id="kusu<?php echo $pocitadlo; ?>" name="kusu<?php echo $pocitadlo; ?>" lable="Počet kusů" value="<?php echo $kusu; ?>" size="2" maxlength="5"/> <input type="hidden" id="id_z<?php echo $pocitadlo; ?>" name="id_z<?php echo $pocitadlo; ?>" value="<?php echo $row['id_zbozi']; ?>"/> <a href="okno.php" id='link_content<?php echo $pocitadlo;?>' onclick="send_request('id_z<? echo $pocitadlo; ?>','kusu<?php echo $pocitadlo; ?>')">Vložit do košíku</a> </form> <?php } ?> </div> <?php ob_end_flush(); ?> </body> </html> ajax.js subject_id = ''; function handleHttpResponse() { if (http.readyState == 4) { if (subject_id != '') { document.getElementById(subject_id).innerHTML = http.responseText + document.getElementById(subject_id).innerHTML; } } } function getHTTPObject() { var xmlhttp; /*@cc_on @if (@_jscript_version >= 5) try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { alert('Error while creating ActiveX object'); xmlhttp = false; } } @else xmlhttp = false; @end @*/ if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { try { xmlhttp = new XMLHttpRequest(); } catch (e) { alert('Error while creating XMLHttp Request object'); xmlhttp = false; } } return xmlhttp; } var http = getHTTPObject(); // We create the HTTP Object functions.js function send_request(content_id,sender) { content = document.getElementById(content_id).value; t3 = document.getElementById(sender).value; if(content.length) { //document.getElementById(content_id).value = ""; //document.getElementById(content_id).focus(); http.open("GET", "script_page.php?t3="+ encodeURIComponent(t3) +"&content=" + encodeURIComponent(content), true); http.onreadystatechange = handleHttpResponse; http.send(null); } } script_page.php <?php session_start(); Ob_start(); include("config.php"); //header('Content-Type: text/html; charset=iso-8859-2'); $id_z= $_GET['content']; $p_kusu = $_GET['t3']; // zde je ukládání do SESSIONS, ale pro testování používám ukládání do databáze... ?> okno.php <?php header('Content-Type: text/html; charset=windows-1250'); include("config.php"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="www.w3.org/1999/xhtml"> <head> <title>Oznámení</title> </head> <body> <div style='width:450px'> <img src='TabulaPeutingerianaMuziris.jpg' /><br/> <p>Zboží bylo přidáno do košíku.</p> <input type="submit" value="Pokračovat v nakupování" onclick="$('#link_content').colorbox.close();"> <a href="./objednavka.php"><input type="submit" name="send" value="Přistoupit k uzavření objednávky"></a> </div> </body> </html> jquery.colorbox-min.js Tento soubor jsem stáhl zde: Colorbox Moderátor Davex: Kód minimalizovaných JavaScriptů sem prosím nevkládej už nikdy. Smazáno.
|
||
_es Profil |
vazo:
„Možná bude nejlepší, když sem dám veškeré zdrojové kódy...“ Nebude, viď Povídání o živých ukázkách. Z popisu tipujem chybu v [#5] - nevkladáš pri práci s „košíkom“ do stránky viac elementov s rovnakým id ? Metóda document.getElementById vtedy vráti prvý z nich.
|
||
vazo Profil |
#8 · Zasláno: 29. 12. 2012, 17:29:37
Tak jsem to teď nahrál na server, abych mohl poslat odkaz na živou ukázku a k mému úžasu zde vše funguje jak má... Tak nevím, proč to na virtuálním serveru (localhostu) nechtělo běžet. :-/ Btw kdyby jste měl někdo nějaký tip či návrh jak to celé ještě zjednodušit, byl bych rád.
|
||
_es Profil |
#9 · Zasláno: 29. 12. 2012, 18:13:50
vazo:
„zde vše funguje jak má...“ Mne asi nie (prehliadač Firefox). Prečo tam máš normálne odkazy a súčasne aj k nim priradené udalosti onclick ? Potom nie je isté, či sa pred opustením stránky stihne vykonať kód z onclick atribútu.
|
||
vazo Profil |
#10 · Zasláno: 29. 12. 2012, 18:29:15
Před chvílí jsem tam něco upravoval, teď by to mělo fungovat... (po odzkoušení pár záznamů je nutné stránku refreshnout, aby bylo vidět přidání záznamů do dolní tabulky - tato tabulka je jen pro kontrolu a proto není dynamická). Já používám taky Firefox.
Onclick a normální odkazy tam jsou zatím schválně, jelikož nevím, jak ošetřit situaci, kdy bude mít uživatel Javascript ve svém prohlížeči vypnutý.
|
||
_es Profil |
vazo:
„ Onclick a normální odkazy tam jsou zatím schválně, jelikož nevím, jak ošetřit situaci, kdy bude mít uživatel Javascript ve svém prohlížeči vypnutý.“
No ale potom ti tam asi chýba zrušenie akcie odkazu, teda prejdenie na inú stránku - nie? Volanie AJAXového požiadavku, ak trvá dlhšie, môže byť prerušené prejdením na inú stránku v tom istom okne. |
||
Časová prodleva: 13 let
|
0