Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [javascript]Błąd podczas przesyłania danych AJAXEM
Forum PHP.pl > Forum > Przedszkole
xSebaPL
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. });
Comandeer
Skrypt PHP najprawdopodobniej zwraca niepoprawny JSON.
xSebaPL
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. ?>
Comandeer
Hm, w teorii powinno działać… Obadaj w konsoli, w zakładce "Network" jak wygląda odpowiedź.
trueblue
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).
xSebaPL
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
trueblue
W php również nie jest potrzebne json_encode.
Sprawdź czy aby na pewno wysyłasz id filmu.
xSebaPL
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
trueblue
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.
xSebaPL
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?
nospor
Zrob var_dump($mov);
a zapewne zauwazysz tam cala mase spacji....
xSebaPL
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 biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.