Skoči na vsebino

IPB




Slika

Php: Kodiranje Košarice (Spletna Prodajalna) S Pomočjo Ajaxa

php ajax javascript

Odgovorov v temi: 8

#1 J4zzm4n

J4zzm4n

    nOObie

  • Members
  • 15 objav
  • Spol:Moški

Objavljeno 11 april 2013 - 10:38

Zdravo!

 

Že nekaj časa me muči problem, da bi implementiral dodajanje v košarico ne da bi moram osvežit spletno stran ali da bi me usmerilo na drug php dokument.

 

Trenutno sem tako daleč, da ko klikneš na "dodaj v košarico" te to preusmeri drug php, ki vsebuje kodo s pomočjo katere shranim podatke v session in prikažem izdelke v košarici. Jaz pa bi rad to, da ko klikneš na "dodaj v košarico" se kliče ta akcija, doda podatke v session in se desno zgoraj v meniju(podatki o trenutni košarici) se element doda v košarico. Vse to brez osvežitve celotne spletne strani.

 

Sem pobrskal internet, sprobal nekaj stvari vendar mi zadeva ne deluje kot mora. Izvedel sem, da se to da rešit s pomočjo Ajaxa.

 

Prosim za pomoč 

 

hvala

lp



#2 xfirestorm

xfirestorm

    /dev/null

  • Moderators
  • 3 783 objav
  • Spol:Moški
  • Kraj:Murska Sobota
  • Interesi:Airsoft

Objavljeno 11 april 2013 - 11:05

Ajax call ti bo verjetno najlažje poklicat z jQuery:

http://api.jquery.com/jQuery.ajax/

 

Namesto da preusmeriš obiskovalca na ta PHP page, pokličeš samo ta page z AJAX, shraniš podatke, vrneš nazaj kaj rabiš in še to "zapišeš v košarico".



#3 J4zzm4n

J4zzm4n

    nOObie

  • Members
  • 15 objav
  • Spol:Moški

Objavljeno 11 april 2013 - 12:54

Sem si pomagal z tvojim urljem vendar mi ne uspet spravit skup zadeve. Sploh nič ne naredi ob kliku na gumb.

Funkcija, ki mi v bistvu ne deluje pa nevem zakaj

	function DodajKosarico(id)
	{
		$.ajax({
        type: "GET",
        url: 'MojiIzdelki.php',
        data: ({ action : add, selector: id }),
        success: function(data) {
                // Call this function on success
				alert('Working?');
            return data;
        },
        error: function() {
            alert('Error occured');
        }
    });
	}

 

Koda v MojiIzdelki.php, ki bi naj dodala izdelek v session - kosarica

if(isset($_SESSION['kosarica']))//preverim če je vrednost v session
{
	$cart = $_SESSION['kosarica'];
}

if(isset($_GET['action']))//preverim če je vrednost v session
{
	$action= $_GET['action'];
}

switch ($action) {
	case 'add':
	echo "gumb";
		if ($cart) {
			$cart .= ','.$_GET['id'];
		} else {
			$cart = $_GET['id'];
		}
		break;

 

 



#4 xfirestorm

xfirestorm

    /dev/null

  • Moderators
  • 3 783 objav
  • Spol:Moški
  • Kraj:Murska Sobota
  • Interesi:Airsoft

Objavljeno 12 april 2013 - 08:59

DodajKosarico se pokliče? jQuery imaš vstavljen v page?

 

Dodaj tole v <head> na strani:

<script src="http://code.jquery.c...ry-1.9.1.min.js"></script>

 

potem pa namesto da deklariraš funkcijo, narediš lahko samo:

$("#id_gumba_za_dodajanje_v_kosarico").click(function() { $.ajax({  
</p><pre>
type: "GET",
url: 'MojiIzdelki.php',
data: ({ action : add, selector: id }),
success: function(data) {
// Call this function on success
alert('Working?');
//return data;
// return ne bo nič pomagal, data ki dobiš nazaj bi po logiki moral vsebovati podatke
// o dodanem izdelku, od tukaj lahko pokličeš funkcijo ki ti zapiše nov izdelek v košarico
// na clientu
},
error: function() {
alert('Error occured');
}
});
});</pre>
});

 

Vprašljivo je, če to sploh rabiš klicat kakšno funkcijo na serverju, če imaš narejeno samo tako. Sem mislil da ob dodajanju zapišeš kaj v bazo, ampak koliko vidim, samo vpišeš nekaj v session in je to to. Ajax calla niti ne bi rabil.

 

Malo je težko povedati kako, ker je premalo kode, bom predpostavil del kode kako bi to lahko izgledalo in glede na to kodo kako bi potem to vstavil v košarico.

 

 

<html>
<head>
<title>Kosarica</title>
<script type="text/javascript">
$(document).ready(function() {
$(".btnKupi").click(function() {
var table = $("#tabKosarica");
var id = $(this).parent().find("#izdelekId").text();
var ime = $(this).parent().find("span.sIme").text();
var cena = $(this).parent().find("span.sCena").text();
 
var row = "";
row+="<tr><td>";
row+="<input type='hidden' value='"+id+"' />";
row+=ime;
row+="</td><td>";
row+=cena;
row+="</td></tr>";
 
table.append(row);
});
});
</script>
</head>
<body>
<div id="divKosarica">
<table id="tabKosarica">
</table>
<table id="tabKosaricaSkupaj">
<tr>
<td>
Skupni znesek:&nbsp;
</td>
<td>
<span id="sSkupaj"></span>
</td>
</tr>
<tr>
<td colspan="2">
<input type="button" value="Na blagajno" id="btnBlagajna">
</td>
</tr>
</table>
</div>
<div id="divIzdelki">
<!-- ta del bi naložil z php iz podatkovne baze, lahko pa za test statično vpišeš par izdelkov brez PHP, primer, samo odkomentiraj: -->
<!--<div id='divIzdelek1' class='izdelek'>
<input type='hidden' value='1' name='izdelekId' id='izdelekId' />
<span class='sIme'>Izdelek</span>
<span class='sOpis'>Opis izdelka</span>
<span class='sCena'>20</span>&nbsp;€
<input type='button' value='V kosarico' class='btnKupi' />
</div>-->
<?php
// Koda ki naloži izdelke iz baze bi bila tukaj
// Potem pa izpis, vrstica po vrstica:
$count = 1;
while($row = mysql_fetch_array($result)) {
echo "<div id='divIzdelek".$count."' class='izdelek'>";
echo "<input type='hidden' value='".$row["id"]."' name='izdelekId' id='izdelekId' />";
echo "<span class='sIme'>".$row["ime_izdelka"]."</span>";
echo "<span class='sOpis'>".$row["opis_izdelka"]."</span>";
echo "<span class='sCena'>".$row["cena_izdelka"]."</span>&nbsp;€";
echo "<input type='button' value='V kosarico' class='btnKupi' />";
echo "</div>";
}
?>
</div>
</body>
</html>

 

Če ti kaj ni razumljivo v kodi povej, ampak mislim da ni neka tako huda koda da je ne bi vedel razbrati. Seveda je to samo hiter primer, ni količine, brisanja iz košarice, itd.

 

OMG...kako je to formiralo...



#5 J4zzm4n

J4zzm4n

    nOObie

  • Members
  • 15 objav
  • Spol:Moški

Objavljeno 12 april 2013 - 13:48

Moram zdaj to poskusit kaj si mi dal. 

Zamislil pa sem si tako, da košarico nočem shranjevat v bazo, saj veliko ljudi se na koncu ne odloči za nakup. V bistvu bi brez smisla obremenjeval bazo, zato pa so seje idealna rešitev(vsaj za mene). 



#6 xfirestorm

xfirestorm

    /dev/null

  • Moderators
  • 3 783 objav
  • Spol:Moški
  • Kraj:Murska Sobota
  • Interesi:Airsoft

Objavljeno 14 april 2013 - 06:41

Ja, saj je nesmisel shranjevat v bazo. Ampak sem avtomatično predvideval da to hočeš narediti, ko si omenjal AJAX.

 

Ta koda ki sem ti jo jaz dal, ne kliče ničesar, ampak samo z jQuery vpiše izbran produkt v košarico.

Če hočeš, si lahko vzamem še kakšno minutko in "dogradim" da se bo to shranilo v session.

Lp



#7 J4zzm4n

J4zzm4n

    nOObie

  • Members
  • 15 objav
  • Spol:Moški

Objavljeno 15 april 2013 - 08:36

xfirestorm to bi bilo zelo fajn od tebe! Trenutno se  trudim in cenim tvojo pomoč

 

lp



#8 xfirestorm

xfirestorm

    /dev/null

  • Moderators
  • 3 783 objav
  • Spol:Moški
  • Kraj:Murska Sobota
  • Interesi:Airsoft

Objavljeno 15 april 2013 - 12:38

Evo, še dodelan ajax klic:

<html>

<head>
<title>Kosarica</title>
<script type="text/javascript">
$(document).ready(function() {
$(".btnKupi").click(function() {
var table = $("#tabKosarica");
var id = $(this).parent().find("#izdelekId").text();
var ime = $(this).parent().find("span.sIme").text();
var cena = $(this).parent().find("span.sCena").text();
 
$.ajax({
type:"POST",
url:"sessionsave.php",
dataType:"json",
contentType:"application/json; charset=utf-8",
data:"{productId:"+id+"}",
success: function(data) {
// shranjevanje v session je uspelo, zdaj zapisemo se izdelek v kosarico na webu:
var row = "";
row+="<tr><td>";
row+="<input type='hidden' value='"+id+"' />";
row+=ime;
row+="</td><td>";
row+=cena;
row+="</td></tr>";
 
table.append(row);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
// Ker je prislo do napake pri shranjevanju v session, ne zapisemo izdelka v kosarico, ampak samo javimo napako
var responseText = textStatus + " (errorThrown)";
alert(responseText);
}
});
});
});
</script>
</head>
<body>
<div id="divKosarica">
<table id="tabKosarica">
</table>
<table id="tabKosaricaSkupaj">
<tr>
<td>
Skupni znesek:&nbsp;
</td>
<td>
<span id="sSkupaj"></span>
</td>
</tr>
<tr>
<td colspan="2">
<input type="button" value="Na blagajno" id="btnBlagajna">
</td>
</tr>
</table>
</div>
<div id="divIzdelki">
<!-- ta del bi naložil z php iz podatkovne baze, lahko pa za test statično vpišeš par izdelkov brez PHP, primer, samo odkomentiraj: -->
<!--<div id='divIzdelek1' class='izdelek'>
<input type='hidden' value='1' name='izdelekId' id='izdelekId' />
<span class='sIme'>Izdelek</span>
<span class='sOpis'>Opis izdelka</span>
<span class='sCena'>20</span>&nbsp;€
<input type='button' value='V kosarico' class='btnKupi' />
</div>
<div id='divIzdelek2' class='izdelek'>
<input type='hidden' value='2' name='izdelekId' id='izdelekId' />
<span class='sIme'>Izdelek 2</span>
<span class='sOpis'>Opis izdelka 2</span>
<span class='sCena'>10</span>&nbsp;€
<input type='button' value='V kosarico' class='btnKupi' />
</div>-->
<?php
// Koda ki naloži izdelke iz baze bi bila tukaj
// Potem pa izpis, vrstica po vrstica:
$count = 1;
while($row = mysql_fetch_array($result)) {
echo "<div id='divIzdelek".$count."' class='izdelek'>";
echo "<input type='hidden' value='".$row["id"]."' name='izdelekId' id='izdelekId' />";
echo "<span class='sIme'>".$row["ime_izdelka"]."</span>";
echo "<span class='sOpis'>".$row["opis_izdelka"]."</span>";
echo "<span class='sCena'>".$row["cena_izdelka"]."</span>&nbsp;€";
echo "<input type='button' value='V kosarico' class='btnKupi' />";
echo "</div>";
}
?>
</div>
</body>
</html>

 
PHP za shranjevanje v session pa je dokaj preprosto. Inicializiraš session, če $_SESSION['tvoja_spremenljivka'] še ne obstaja, najprej še incializiraš prazen array in vpišeš prvi ID ($_POST['id']) v ta array in potem ta array zapišeš v $_SESSION['tvoja_spremenljivka']. Ob naslednjem klicu, najprej array naložiš nazaj iz session, dodaš nov ID v ta array in array ponovno zapišeš v session.


#9 J4zzm4n

J4zzm4n

    nOObie

  • Members
  • 15 objav
  • Spol:Moški

Objavljeno 15 april 2013 - 12:58

p.s.: ko kodo dodajaš  imaš tam gor znak "<>". To klikni se ti odpre okencu in noter izbereš javascript,... Da se koda ne formatira tak čudno..





Dodaj odgovor



  



Podobne teme s ključnimi besedami: php, ajax, javascript

0 član(ov) bere to temo

0 članov, 0 gostov, 0 anonimnih uporabnikov