Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [javascript]Błąd podczas przesyłania danych AJAXEM
xSebaPL
post
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


Witam wszystkich, mam problem z przesyłem danych za pomocą ajax. Otóż gdy próbuję przesłać dane w ajax wyskakuje taki błąd:
Kod
parsererror
SyntaxError: Unexpected token


A tak wygląda skrypt:
  1. $("#playerf").click(function() {
  2. //$("#playeroff").hide();
  3. $("#player").show();
  4. var dataf = $("#movieData").html();
  5. $("#playeroff").text(dataf);
  6. $.ajax({
  7. type: "POST",
  8. url: 'functions/addView.php',
  9. dataType: "json",
  10. data: {functionname: 'addView', arguments: [dataf]},
  11. success: function (obj, textstatus) {
  12. $("#playeroff").text("It fucking works!");
  13. },
  14. error: function (obj, text, error) {
  15. $("#playeroff").text(text + ": " + error);
  16. }
  17. });
  18. });
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Comandeer
post
Post #2





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Skrypt PHP najprawdopodobniej zwraca niepoprawny JSON.
Go to the top of the page
+Quote Post
xSebaPL
post
Post #3





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


Cytat(Comandeer @ 24.01.2016, 00:09:11 ) *
Skrypt PHP najprawdopodobniej zwraca niepoprawny JSON.


Ahh to najprawdopodobniej wynika z mojej nie wiedzy jak poprawnie powinien on wyglądać. Więc zrobiłem go po prostu żeby był. Możesz mi pokazać jak go dobrze zakodować żeby nie było błędu i skrypt poprawnie działał?


Załączam jak wygląda skrypt php:
  1. <?php
  2. header('Content-Type: application/json');
  3. include("../config.php");
  4. db_connect();
  5. switch($_POST['functionname']) {
  6. case 'addView':
  7. addView($_POST['arguments'][0]);
  8. break;
  9. }
  10.  
  11. function addView($mov) {
  12. $viewsRes = mysql_query('SELECT `VIEWS` FROM `movies` WHERE ID=`'.$mov.'`');
  13. $viewsRow = mysql_fetch_row($viewsRes);
  14. $viewsNb = $viewsRow['VIEWS']+1;
  15. mysql_query('UPDATE `movies` SET `VIEWS`=`'.$viewsNb.'` WHERE ID=`'.$mov.'`');
  16. echo json_encode($viewsNb);
  17. }
  18. db_close();
  19. ?>
Go to the top of the page
+Quote Post
Comandeer
post
Post #4





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Hm, w teorii powinno działać… Obadaj w konsoli, w zakładce "Network" jak wygląda odpowiedź.
Go to the top of the page
+Quote Post
trueblue
post
Post #5





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


mysql_fetch_row zwraca tablicę numerowaną, a nie asocjacyjną, więc nie masz nic pod indeksem VIEWS.
Inna sprawa, że skoro nie zwracasz tablicy, a pojedynczą wartość, nie musisz angażować do tego parsera JSON (w jQuery).
Go to the top of the page
+Quote Post
xSebaPL
post
Post #6





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


mysql_fetch_row zamieniłem na mysql_fetch_assoc, a co do tego json to go zamienić na text tak?

Edit:
Po zamienieniu json na text błąd nie wyskakuje, tylko uruchamia się funkcja success ale też coś nie dodaje viewsów do bazy danych

Ten post edytował xSebaPL 25.01.2016, 03:04:25
Go to the top of the page
+Quote Post
trueblue
post
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


W php również nie jest potrzebne json_encode.
Sprawdź czy aby na pewno wysyłasz id filmu.
Go to the top of the page
+Quote Post
xSebaPL
post
Post #8





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


Zrobiłem tak:
  1. function addView($mov) {
  2. db_connect();
  3. $viewsRes = mysql_query("SELECT `VIEWS` FROM `movies` WHERE ID='$mov'");
  4. if(mysql_num_rows($viewsRes)>0) {
  5. $viewsRow = mysql_fetch_assoc($viewsRes);
  6. $viewsNb = $viewsRow['VIEWS']+1;
  7. mysql_query('UPDATE `movies` SET `VIEWS`=`$viewsNb` WHERE `ID`=`$mov`');
  8. header('Content-Type: application/json');
  9. echo $viewsNb;
  10. } else {
  11. echo "Did not find any rows".$mov;
  12. }
  13. db_close();
  14. }


  1. $.ajax({
  2. type: "POST",
  3. url: 'functions/addView.php',
  4. dataType: "text",
  5. data: {functionname: 'addView', arguments: [dataf]},
  6. success: function (obj, textstatus) {
  7. $("#playeroff").text(dataf + " It fucking works! " + obj);
  8. },
  9. error: function (obj, text, error) {
  10. $("#playeroff").text(text + ": " + error);
  11. }
  12. });


No i wyświetla taki ciąg
Kod
3 It fucking works! Did not find any rows 3


Więc z moich mysli wynika że to błąd z zapytanie mysql_query, tyle że wszystkie tabelki w bazie danych są na miejscach ;(
http://zapodaj.net/f9e8d96617f45.png.html

Ten post edytował xSebaPL 25.01.2016, 17:42:15
Go to the top of the page
+Quote Post
trueblue
post
Post #9





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Nadal nie wiadomo co wysyłasz w tablicy arguments, a co za tym idzie, co dostajesz w $_POST['arguments'].
header nie jest potrzebny, bo nie wysyłasz danych jako JSON.
Go to the top of the page
+Quote Post
xSebaPL
post
Post #10





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


A więc tak w arguments wysyłam zmienną dataf
  1. var dataf = $("#movieData").html();


Którą pobieram z div movieData(jedyny dla mnie łatwy sposób przesyłu danych z php):

  1. echo '<div id="movieData">
  2. '.$_GET['v'].'
  3. </div>';


i ją przypisuję do arguments:
  1. data: {functionname: 'addView', arguments: [dataf]},


No i tą zmienną dataf(czyli właściwie id filmu któremu mam doliczyć wyświetlenie) potem wyświetlam podczas wykonywania success z ajaxa:

  1. $("#playeroff").text(dataf + " It fucking works! " + obj);


W skrócie, wysyłam id filmu które pobieram z diva, który pobiera wartość 'v' z linku. Wszystko jasne teraz?
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Zrob var_dump($mov);
a zapewne zauwazysz tam cala mase spacji....
Go to the top of the page
+Quote Post
xSebaPL
post
Post #12





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


Mistrzu nospor normalnie dzięki tobie zamieniłem po prostu to na
  1. <div id="movieData">'.$_GET['v'].'</div>';


i normalnie działa.

Wielkie dzięki (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował xSebaPL 25.01.2016, 19:09:33
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 22:26