• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zabawa z ajax, jak odebrać dane json

Object Storage Arubacloud
+1 głos
1,183 wizyt
pytanie zadane 9 stycznia 2016 w JavaScript przez Lid$ Mądrala (6,300 p.)
zmienione kategorie 9 stycznia 2016 przez Arkadiusz Waluk
function like()
		{
			var like_zmienna = $('#like').val();
			$.ajax({
				type: "POST",
				url: "like.php",
				dataType : 'json',
				data: 
				{
				like : like_zmienna
				},
				success: function(odpowiedz) 
				{
				$('#do').html(odpowiedz);
				}
			});
		}

Kod php:

echo json_encode($l_wyjsciowe);

html:


				<input id="like" type="hidden" name="like" value="1" />
				<input type="button" value="Like" onclick="like();" />
			

To ma być system lajkowania, dane w '#do' się nie pokazują.. wie ktoś o co może tutaj chodzić, jak tak to proszę o pomoc? Z góry dzięki ;)

3 odpowiedzi

+2 głosów
odpowiedź 9 stycznia 2016 przez Comandeer Guru (601,590 p.)
wybrane 9 stycznia 2016 przez Lid$
 
Najlepsza
Zobacz przez console.log co dostajesz w odpowiedz.
komentarz 9 stycznia 2016 przez Lid$ Mądrala (6,300 p.)
success: function(odpowiedz) 
	{
		console.log(odpowiedz['like']);
	}

php:

$array = array('like' => $l_wyjsciowe);
echo json_encode($array);

json wychodzi takie jak sprawdzalem:

{"like":"1"} 

i w phpmyadmin dodaje się lajk do bazy, ale console.log nie reaguje w ogóle a jak chce dodać do '#do' to nic się nie pojawia w divie..

komentarz 9 stycznia 2016 przez Comandeer Guru (601,590 p.)
A konsola nic nie rzuca? jQuery miał chyba jakiś silent error przy parsowaniu JSON-a – może tutaj go "rzuca"?
komentarz 9 stycznia 2016 przez Lid$ Mądrala (6,300 p.)

No ok.. ale co w związku z tym? Bo nie wiem jak to ugryźć :D php zwraca to:

{"like":"1"}

więc funkcja ajax powinna to odebrać i od razu se przetworzyć na obiekt js, czyli wpisując takie cuś:

$('#do').html(odpowiedz['like']);

powinno wyświetlić '1' w '#do' ale tak się nie dzieje. Console.log też nie reaguje w ogóle.. pytanie czy w php takie coś:

echo json_encode($array);

wystarczy aby ajax to sobie przechwycił.. bo mało się na tym znam. Wszystko do bazy trafia także funkcja normalnie działa, ale coś jest z tym succes.. może tutaj trzeba zastosować te inne możliwości czyli succes, error, itp ale z tego co wiem to succes wystarczy xD

komentarz 9 stycznia 2016 przez Comandeer Guru (601,590 p.)
No powinien starczyć… Pokaż cały kod PHP.
komentarz 9 stycznia 2016 przez Lid$ Mądrala (6,300 p.)
<?php	
			require_once('dbconnect.php');
			$polacz = @new mysqli($host, $user, $password, $database);

	if($polacz->connect_errno!=0)
		{
			echo "Error: ".$polacz->connect_errno;
		}
	else
		{
			$zap_like_odbazy = "SELECT * FROM ilosc_like";
			$ilosc_like_wych = @$polacz->query($zap_like_odbazy);
			$like_wyjsciowe = @$ilosc_like_wych->fetch_assoc();
			$l_wyjsciowe = $like_wyjsciowe['liczba_likow'];
			$array = array('like' => '$l_wyjsciowe');
			echo json_encode($array);
			
		}
			
	if(isset($_POST['like']))
		{
			$like = $_POST['like'];
			$ip_uzytkownika = $_SERVER['REMOTE_ADDR'];
			
			$zapyt_sprawdz_ip = "SELECT * FROM ip_uzytkownikow WHERE user_ip='$ip_uzytkownika'";
			$sprawdzanie_ip = @$polacz->query($zapyt_sprawdz_ip);
			
			if($sprawdzanie_ip->num_rows == 0)
				{
					$zapyt_zapisz_ip = "INSERT INTO ip_uzytkownikow VALUES ('$ip_uzytkownika')";
					$zapisz_ip = @$polacz->query($zapyt_zapisz_ip);
					
					$zapyt_dodaj_like = "UPDATE ilosc_like SET liczba_likow=liczba_likow+'$like'";
					$dodawanie_lika = @$polacz->query($zapyt_dodaj_like);
					
					$zap_like_odbazy = "SELECT * FROM ilosc_like";
					$ilosc_like_wych = @$polacz->query($zap_like_odbazy);
					$like_wyjsciowe = @$ilosc_like_wych->fetch_assoc();
					$l_wyjsciowe = $like_wyjsciowe['liczba_likow'];
					echo json_encode($array);
				}
			else
				{
					echo json_encode($array);
				}
				
		
		}
$polacz->close();
?>

 

komentarz 9 stycznia 2016 przez Comandeer Guru (601,590 p.)
O ile dobrze widzę, to Twój kod przy normalnym żądaniu wysłanym Ajaksem dwa razy wyświetla JSON-a, co sprawia, że dostarczany jest niepoprawny składniowo JSON.

1. raz wyświetlasz JSON-a z automatu po połączeniu z bazą, a drugi raz po zapisaniu danych z formularza. Wystarczy, że kod wyświetlający liczbę lajków będzie na samym dole skryptu, a na górze będziesz wykonywał operacje na formularzu.

No i polecam obsługiwać błędy, a nie wszystkie ukrywać małpą…
komentarz 9 stycznia 2016 przez Lid$ Mądrala (6,300 p.)
No wiem, że lepiej używać try, catch może go sobie przekształcę skoro już działa :D Bardzo tobie dziękuję, kamień spadł mi z serca jak to zadziałało.. w końcu 3 dni męczarni hehe jeszcze raz dzięki za rady i za pomoc! Pozdrawiam.
+1 głos
odpowiedź 9 stycznia 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)
echo json_encode($l_wyjsciowe);

Zapewne $l_wyjsciowe to tablica tak? I tam powinieneś mieć jakieś indexy (najlepiej tekstowe) z których należy skorzystać.

Przykładowo:

$l_wyjsciowe = ['nazwa' => 'wartosc', 'nazwa2' => 'wartosc2'];

I wtedy żeby skorzystać z tego po zwróceniu do JS należy odwołać się do danego elementu tablicy, przykładowo tak:

$('#do').html(odpowiedz['nazwa']);

I to wstawi do #do dokładnie tekst wartosc.

Mam nadzieję, że zrozumiałeś ;)

PS. Zła kategoria, poprawiłem. Zwróć następnym razem bardziej uwagę przy wyborze.

komentarz 9 stycznia 2016 przez Lid$ Mądrala (6,300 p.)
edycja 9 stycznia 2016 przez Lid$

Zwraca: 

string(12) "{"like":"1"}"

ale nie działa dalej to:

$('#do').html(odpowiedz['like']);

 

0 głosów
odpowiedź 9 stycznia 2016 przez efiku Szeryf (75,160 p.)
komentarz 9 stycznia 2016 przez Comandeer Guru (601,590 p.)
jQuery ogarnia to wewnętrznie.
komentarz 9 stycznia 2016 przez efiku Szeryf (75,160 p.)
Wiesz.. ja chcialem tak bez jQuery, na czysto :D

Podobne pytania

0 głosów
1 odpowiedź 258 wizyt
pytanie zadane 1 czerwca 2016 w JavaScript przez niejestemrobotem Początkujący (360 p.)
0 głosów
2 odpowiedzi 400 wizyt
pytanie zadane 23 grudnia 2016 w JavaScript przez Zbigniew Andrysiak Bywalec (2,470 p.)
0 głosów
1 odpowiedź 395 wizyt
pytanie zadane 12 kwietnia 2017 w PHP przez amiluke Obywatel (1,120 p.)

92,584 zapytań

141,433 odpowiedzi

319,666 komentarzy

61,966 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...