Ajax hívás egyre többször fut le hiba
2014-12-01T19:32:49+01:00
2014-12-01T21:21:21+01:00
2022-08-09T06:41:46+02:00
Jamborka
Üdvözlet!
A lentebb megjelenített kis scripttel, hívok meg egy php fájlt.
ha egyszer rákattintok a kívánt divre akkor lefut 1x
majd ha még 1x akkor lefut 2x
ha ismét rákattintok lefut 4x és így tovább...

ez lenne a kód:

$(document).ajaxComplete(function(){ $( 'div[rel="valtfel"]' ).on("click", function(event){ var valt = $( this ).attr('data-shdata'); var p = valt.split('_'); $.ajax({ type:"POST", url:"add_to_cart.php", data: {id: p[0], darab: 1, meret: p[1]}, cache:false, }) .done(function(data){ alert(data); }) }) }) //ez a php file dolgozza fel: <?php require 'functions.php'; session_start(); $id = $_POST['id']; $darab = intval($_POST['darab']); $meret = $_POST['meret']; if ($id == "") { } $a = add_to_cart($id, $darab, $meret); # hozzáadja kért adatokat, lekéri mysqlből a többit extract($a); $tetel = $meret."_".$megrendelt_tetel; if (array_key_exists("kosaradat",$_SESSION)) { if (array_key_exists($tetel,$_SESSION['kosaradat'] )) { $_SESSION['kosaradat'][$tetel]['darabszam'] += $darab; } else { $_SESSION['kosaradat'][$tetel] = $a; # itt kerül be a sessionba! } } else{ $_SESSION['kosaradat'][$tetel] = $a; # itt kerül be a sessionba! } echo "Hozzáadva a kosárhoz a(z) {$megrendelt_tetel} pizzából {$darabszam} darab!"; ?>
Mutasd a teljes hozzászólást!
Hali!

Tanulmányozd az ajaxComplete()-et, mivel -- valószínűleg -- nem arra használod, amire való. Az ajaxComplete()-tel regisztrálsz egy kezelőt, ami akkor fut le, ha egy Ajax-hívás befejeződik. Ebben a kezelőben pedig indítasz egy Ajax-hívást. Érzed a "furcsaságot"?

Mutasd a teljes hozzászólást!

  • Ejj,
    de ha document readybe teszem nem fut le :/ na ez vajon miért lehet?
    egyébként egy ajax hívással készített "message box"-ban dinamikusan létrehozott adatokon használnám.
    Mutasd a teljes hozzászólást!
  • Hali!

    Fogalmazd meg, hogy konkrétan mit szeretnél: mi induljon automatikusan, mi történjen kattintásra, mi történjen, ha az Ajax-hívás megtörténik.

    Mutasd a teljes hozzászólást!
  • Nos az a helyzet, hogy van egy kosár ami egy top-500px-en lévő div.
    a kosár megjelenítésénél lekkérem az adatokat, majd megjelenítem azt egy divben.

    $('#kosar').on("click", function(){ $('#takaro').css("display", "block") $.ajax({ type:"GET", url: "show_cart.php", cache:false, }) .done(function(kosar){ $( "#cart_con" ).html(kosar); }); $( "#kosar_box" ) .animate({ "top": 20 }, 200 ) .effect( "bounce", { times: 1, direction: "down", distance: 15 }, 400 ); $("#order_p").on("click", function(){ $( "#kosar_box" ).animate({ "top": "-400px" }, "fast" ) setTimeout(function(){$('#takaro').css("display", "none");},200); }); });
    Abban a divben pedig vannak gombok "+" "-" a tétel növeléséhez illetve csökkentéséhez.
    És amikor ez a div megjelenik na akkor a témanyitóban említett scripttel csak az ajaxComplete eseménnyel tudtam a gombokat működésre bírni. és itt az lenne a funkció, hogy ott helyben változna az adott darabszám.
    Mutasd a teljes hozzászólást!
  • Szia!
    Ahogy  a kolléga utalt rá, az ajaxComplete minden egyes ajax hívás végeztével lefut.
    Ha itt regisztrálod, az onclick eseményed, akkor pont azt éred el, amit írtál az n. klikkre 2^n-en futásod lesz. Mert minden egyes alkalommal bejegyzel egy eseménykezelőt az onclickre.
    Az onclick eseménykezelőt a document.ready-be jegyezd be. Annak le kell futnia, mindig lefut, amikor felépült  a HTML dom. Nem látom a HTML layoutod, de ha nem fut le, akkor általában az szokott lenni, hogy ahová a $.(document).ready-t tetted, ott még nincs regisztrálva  a jquery. Ha az ajax complete fut, akkor tedd ennek a helyére, futnia kell...
    Mutasd a teljes hozzászólást!
  • Az összes a headben van, ha a php-l adatom át tehát:

    ############################################ # Kosár tartalmának megjelenítése függvény # ############################################ function show_cart(){ if (!empty($_SESSION['kosaradat'])) { foreach ($_SESSION['kosaradat'] as $key) { if (is_array($key)) { extract($key); if ($meret == "kicsi") { $price = $kicsi; $size = "33 Cm"; } else{ $price = $nagy; $size = "50 Cm"; } ?> <script type="text/javascript"> $(document).ready(function(){ $( 'div[rel="valtfel"]' ).on("click", function(event){ var valt = $( this ).attr('data-shdata'); var p = valt.split('_'); $.ajax({ type:"POST", url:"mod_cart.php", data: {id: p[0], darab: 1, meret: p[1]}, cache:false, }) .done(function(data){ $( "#cart_con" ).html(data); }) }) }) </script> <?php echo "<li class='list-group-item list-group-item-success'>Pizza neve: {$megrendelt_tetel} ({$size}) Darabszáma: {$darabszam} ára: {$price} <div rel='valtle' data-shdata='{$azonosito}_{$meret}' class='round-button-negative'>-</div><div rel='valtfel' data-shdata='{$azonosito}_{$meret}' class='round-button-positive'>+</div></li>"; } } } else { die("<p style='font-weight:bold; font-size:26px; color:red; text-align:center; display:block; width:100%;'>A kosár üres!</p>"); } } ?>
    Na ekkor lefut. document.readyben is
    Mutasd a teljes hozzászólást!
  • Hali!

    ... de ha nem fut le, akkor általában az szokott lenni, hogy ahová a $.(document).ready-t tetted, ott még nincs regisztrálva  a jquery.

    Ha ezt a helyzet lenne, akkor az ajaxComplet()-tel sem tudna regisztrálni eseménykezelőt. A többi -- szerintem -- stimmel.

    Mutasd a teljes hozzászólást!
  • Nos erről lenne szó:
    meg tudom mutatni meddig jutottam:
    http://89.133.99.41/retro_shop/pizza.php
    Mutasd a teljes hozzászólást!
  • Hali!

    És mi nem működik itt? Lehet, hogy átsiklottam valami felett, de szerintem a kívánalmaidnak megfelelően megy minden -- talán csak a Kosár tartalma "ablakon" lévő Tovább böngészés gomb nem.

    Mutasd a teljes hozzászólást!
  • Fentebb írtam hogy ha a függvénybe teszem akkor lefut, de az nem valami frappáns megoldás, és beleteszi az ul elembe ami megintcsak zavar kicsit.
    Mutasd a teljes hozzászólást!
  • Hali!

    Nem lehet, hogy az a gond, hogy eléggé "silány" az oldal kódja? Csomó hiba, több DOCTYPE (kvázi két oldalt jelenítesz meg), stb.

    Mutasd a teljes hozzászólást!
  • Ööö  :)

    azt észrevettem mert ugye még most alkotom meg a dolgot, ezt az egészet szépen átpakolom majd egy teljesen átgondoltba, viszont az ul-t nem tudtam megoldani valamiért ha beraktama  függvénybe akkor nem jött át.

    amúgy kijavítottam a hibákat
    http://89.133.99.41/retro_shop/teszt.php
    Mutasd a teljes hozzászólást!
  • Hali!

    amúgy kijavítottam a hibákat

    Azért, akad még pár.

    Lehet, hogy már fáradt vagyok, de én nem látom a hibát. Nálam nem adja duplán/négyszeresen/stb. hozzá a kosárhoz.

    Mutasd a teljes hozzászólást!
  • Megcsináltam mindet :)
    már csak egy szokásos warning van, amúgy én vagyok a béna -,-


    este van és fáradt vagyok egyszóval megoldódott a probléma. azzal, hogy a függvénybe raktam a scriptet. annyit csinálok vele, hogy kiteszem egy js- fileba és onnan linkelem be.

    Üdv.
    köszi a segítséget.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd