• 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
+1 głos
1,628 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 (607,060 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 (607,060 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 (607,060 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 (607,060 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 (290,250 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 (607,060 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ź 312 wizyt
pytanie zadane 1 czerwca 2016 w JavaScript przez niejestemrobotem Początkujący (360 p.)
0 głosów
2 odpowiedzi 540 wizyt
pytanie zadane 23 grudnia 2016 w JavaScript przez Zbigniew Andrysiak Bywalec (2,470 p.)
0 głosów
1 odpowiedź 571 wizyt
pytanie zadane 12 kwietnia 2017 w PHP przez amiluke Obywatel (1,120 p.)

93,440 zapytań

142,434 odpowiedzi

322,681 komentarzy

62,802 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

...