DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   (X)HTML, JavaScript, DHTML, XML, CSS (http://www.devprotalk.com/forumdisplay.php?f=8)
-   -   Ajax problem sa json-om (http://www.devprotalk.com/showthread.php?t=11928)

stanke 03. 11. 2014. 13:24

Ajax problem sa json-om
 
Pozdrav imam jedan problem ajax mi ne vraca neke podatke preko jsona
u PHP imam kod

public static function activeButton($sess_id) {
if(isset($_SESSION['basket'][$sess_id])) {
$id = 0;
$label = "Remove from basket";
} else {
$id = 1;
$label = "Add to basket";
}

$out = "<a href=\"#\" class=\"add_to_basket";
$out .= $id == 0 ? " red" : null;
$out .= "\" rel=\"";
$out .= $sess_id."_".$id;
$out .= "\">{$label}</a>";
return $out;
}

i on daje link <a class="add_to_basket" rel="3_1" href="#">Add to basket</a>
3 je id iz baze a 1 je vrednost koja sluzi za menjanje imena linka ako je 1 onda je Add to basket ako je 0 onda je Remove from basket.
$sess_id je id iz baze za odgovarajuci proizvod.
To sve radi perfektno. Problem je u Ajax preko json-a ne mogu da dobijem id proizvoda npr. 3_1 ne vraca mi 3 uopste kod je sledeci:

$(document).ready(function (){

function refreshSmallBasket(){
$.ajax({
url: "mod/basket_small_refresh.php",
dataType: 'json',
success: function (data) {
//foreach data arrayk is key v is value
$.each(data, function (k, v){
//in basket_left id for each classes for reffering index k and span filling with value v
$("#basket_left ." + k + " span").text(v);
});
},
error: function(xhr, status, errorThrown) {
//alert("An error has occurred");
console.log("Proble Load");
console.log("Error: " + errorThrown);
console.log("Status: " + status);
console.dir(xhr);
}
});
}

//check that class exist i our case add_to_basket class
if($(".add_to_basket").length > 0){
//on click in this class add_to_basket
$(".add_to_basket").click(function(){
//triiger is add_to_basket class
var trigger = $(this);
//parma is add_to_basket basket class on click and get attribut rel our rel is exapmple re=2_1
var param = trigger.attr("rel");
console.log("rel is " + param);
//this rel split with _ then we have 2 and 1
var item = param.split("_");
console.log("Split rel is " + item);


//add ajax
$.ajax({
type: 'POST',
url: 'mod/basketprod.php',
dataType: 'json',
data: ({ id: item[0], job: item[1] }),
success: function (data){
//create new rel example rel=2_0
var new_id = data.id + '_' + data.job;
console.log("Id is " + data.id);
console.log("rel is " +data.job);
console.log("new rel is " + new_id);
//if id different then job
if(data.job != item[1]){
//if job 0
if(data.job == 0){
//add to add_to_basket class new rel with new id
trigger.attr("rel", new_id);
//add new text
trigger.text("Remove From Basket");
//add class red
trigger.addClass("red");

}
else{
trigger.attr("rel", new_id);
trigger.text("Add to basket");
trigger.removeClass("red");
}
refreshSmallBasket();
}
},
error: function(xhr, status, errorThrown) {
//alert("An error has occurred");
console.log("Proble Load");
console.log("Error: " + errorThrown);
console.log("Status: " + status);
console.dir(xhr);
}
});
//not loading link
return false;
});
}
});

U drugom po redu ajax-u, json ne vraca id. iznad ovog ajaxa ima kod za umizanje rel
var param = trigger.attr("rel"); dobijem tacnu vrednos 3_1, u ajaxu razdvojim rel var new_id = data.id + '_' + data.job; i dobijem 3,1 a kad hocu da spojim rel ponovo var new_id = data.id + '_' + data.job; onda dobijem rel=undefined_0, id ne mogu nikako da vratim kako bi uzeo proizvod iz baze.
Molim za pomoc

Br@nkoR 03. 11. 2014. 19:26

Koristi bbcode kako bi formatirao kod.
Objasni malo bolje problem. Postavi i kod basketprod.php fajla, da li on vraća id, npr. u Chrome u Developer Tools-a, u okviru Network tab-a, ili u konzoli ukljući logovanje XMLHttpRequests i pogledaj šta vraća isti php fajl. Da nisi hteo:
Kôd:

var new_id = item[0] + '_' + data.job;

stanke 03. 11. 2014. 21:48

Sad id radi prikazuje al izgleda da nece json da ga prosledi dobijam Status Code:304 Not Modified, adresa sajta je http://www.mojtestdomen.net84.net
Prilikm odabira kategorije pojavljuju se knjige iz te kategorije klikom na Add to basket treba cena pdv i kolicina da se prosledi a Remove from basket da se ukloni i kada se odabere iz iste kategorije ili zdruge da se saberu cene ili oduzmu i to se sve prikazuje u polju u delu Your Basket

Br@nkoR 04. 11. 2014. 10:47

Sa servera dobijaš samo job ( {"job":0} ), dakle problem potraži u php fajlu basketprod.php. Mada ako je id isti kao u rel atributu, zašto ga onda ponovo vraćaš sa servera?

stanke 04. 11. 2014. 12:48

Isti je al ih razdvajam jel napr rel=2_0 kad ih razdvojim baskedprod.php imafunkciju koja uzima cenu naziv knjige za taj id a kad je 0 onda je Add to basket a kad je 1 onda je Remove from basket. Al ne znam zasto nece id da vrati kod iz basketprod.php je

if (isset($_POST['job']) && isset($_POST['id']))
{
$out = array();
$job = $_POST['job'];
$id = $_POST['id'];
$objCatalogue = new Catalogue();
$product = $objCatalogue->getProduct($id);
if (!empty($product))
{
switch($job)
{
case 0:
Session::removeItem($id);
$out['job'] = 1;
break;
case 1:
Session::setItem($id);
$out['job'] = 0;
break;
}
echo json_encode($out);
}
}
?>

A iz Session klaase je

class Session
{
public static function setItem($id, $qty = 1)
{
//create session basket with index of id of specific product and quantity
$_SESSION['basket'][$id]['qty'] = $qty;
}

public static function removeItem($id, $qty = null)
{
if($qty != null && $qty < $_SESSION['basket'][$id]['qty'])
{
$_SESSION['basket'][$id]['qty'] = ($_SESSION['basket'][$id]['qty'] - $qty);
}
else
{
//set to null basket if removet item
$_SESSION['basket'][$id] = null;
unset($_SESSION['basket'][$id]);
}
}


//end class
}

Br@nkoR 04. 11. 2014. 14:03

Ok, job menjaš, a id ostaje isti.
Ne prosleđuješ id.
Npr. ispod linije:
PHP kôd:

$id $_POST['id']; 

dodaj:
PHP kôd:

$out['id'] = $id


stanke 08. 11. 2014. 17:18

Hvala, vratio je Id


Vreme je GMT +2. Trenutno vreme je 05:41.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.