Autor Zpráva
vazo
Profil
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'];?>'...
... a které už bylo jednou použito, nebo se pletu? Jinak, když pomocí F5 stránku obnovím, všechno zboží jde zase "jednou" přidat do košíku.
Mohl by jste mi pls někdo poradit, jak tuto nedokonalost odstranit?
Předem moc díky! ;-)
1Pupik1989
Profil
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.
vazo
Profil
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
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
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
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
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
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.

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:

Prosím používejte diakritiku a interpunkci.

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