Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: parseJSON
Forum PHP.pl > Forum > XML, AJAX
Hosiek
Mam problem z funkcją parseJSON - w ajaxie mam zrobioną aktualizacje wiadomosci, po aktualizacji wysyla mi dane i poprzez parseJSON ma wyslac mi dwie informacje, informacja o poprawnosci oraz zaktualizowany tekst, i oczywiscie te dwie rzeczy maja byc w innym miejscu dlatego musze uzyc tej funkcji.

Kod mam "prawie" dzialający, gdzieś jest mały błąd, troche speram w tym kodzie i nie moge go wynalesc..

Jezeli mam tak to działa:
  1. <script type=\"text/javascript\">
  2. jQuery(document).ready(function(){
  3. jQuery(\".button_aktualizuj\").click(function(){
  4. jQuery.ajax({
  5. type:\"POST\",
  6. url:\"aktualizacja.php\",
  7. dataType: \"text\",
  8. data:\"dana=\"+jQuery(\".tekst_biografii\").val(),
  9. success: function(data){
  10. var obj = jQuery.parseJSON('{\"txt\":"tekst wiadomosci", "ajax_result":"1"}');
  11. if( obj.ajax_result === 1 )
  12. {
  13. jQuery('.wynik_aktualizacji_ajax_jquery').html(obj.txt);
  14. }
  15. else
  16. {
  17. jQuery('.wynik_aktualizacji').html(obj.txt);
  18. }
  19. },
  20. error: function(){
  21. alert('Blad z wysylaniem danych na serwer');
  22. }
  23. });
  24. });
  25. });
  26. </script>


Jednak w skrypcie powyzej podałem zmienna do parsowania a ma byc ona wyczytana z "data", czyli mniej wiecej tak:

  1. <script type=\"text/javascript\">
  2. jQuery(document).ready(function(){
  3. jQuery(\".button_aktualizuj\").click(function(){
  4. jQuery.ajax({
  5. type:\"POST\",
  6. url:\"aktualizacja.php\",
  7. dataType: \"text\",
  8. data:\"dana=\"+jQuery(\".tekst_biografii\").val(),
  9. success: function(data){
  10. var obj = jQuery.parseJSON('data');
  11. if( obj.ajax_result === 1 )
  12. {
  13. jQuery('.wynik_aktualizacji_ajax_jquery').html(obj.txt);
  14. }
  15. else
  16. {
  17. jQuery('.wynik_aktualizacji').html(obj.txt);
  18. }
  19. },
  20. error: function(){
  21. alert('Blad z wysylaniem danych na serwer');
  22. }
  23. });
  24. });
  25. });
  26. </script>


dane do "data" są pobierane na pewno gdyż moje je wyczytac funkcją jQuery('.wynik_aktualizacji').html(data); co daje mi taki text:
Cytat
{"ajax_result":0,"txt":"tekst"}
Pawel_W
po co się bawić skoro możesz ustawić typ odebranych danych jako json i dostać gotowy obiekt...
Arcioch
Pawel_W dobrze mówi wink.gif zmień typ z dataType: "text" na dataType: "json" i potem obierasz gotowego json odwołując się tak do niego data.txt wink.gif
Hosiek
Cytat(Pawel_W @ 2.10.2012, 18:59:57 ) *
po co się bawić skoro możesz ustawić typ odebranych danych jako json i dostać gotowy obiekt...


próbowałem, wtedy robi sie error i wywala mi to:

  1. error: function(){
  2. alert('Blad z wysylaniem danych na serwer');
  3. }
Arcioch
Pokaż jak wysyłasz dane z php wink.gif pewnie przez echo wink.gif musisz wysłać używająć echo json_encode() smile.gif
Hosiek
Cytat(Arcioch @ 2.10.2012, 19:11:50 ) *
Pokaż jak wysyłasz dane z php wink.gif pewnie przez echo wink.gif musisz wysłać używająć echo json_encode() smile.gif



równiez mam, oto kod:

  1. $ostatnio_query5 = $db->simple_select("biografia", "OSTATNIO_MODYFIKOWANA", "POSTAC='{$nick_postaci}'");
  2. $ostatnio_query1 = $db->fetch_array($ostatnio_query5);
  3. $ostatnio_edytowany = $ostatnio_query1['OSTATNIO_MODYFIKOWANA'];
  4. $data_edycji = date('Y-m-d');
  5. $godzina_edycji = date("H:i:s");
  6. $modyfikowana = $data_edycji . " " . $godzina_edycji;
  7. $ostatnio_edytowany = explode(" ", $ostatnio_edytowany);
  8. $czas = new DateTime($ostatnio_edytowany[1]);
  9. $czas->modify('+30 second');
  10. if($czas->format('H:i:s') > $godzina_edycji)
  11. {
  12. $out['ajax_result'] = 0 ;
  13. $out['txt'] = "musisz odczekac 30 sekund przed ponowną aktualizacją textu" ;
  14. }
  15. else
  16. {
  17. $db->update_query("biografia", array('BIOGRAFIA' => $edytowana_biografia, 'OSTATNIO_MODYFIKOWANA' => $modyfikowana, 'MODYFIKACJA' => '1'), "POSTAC='{$nick_postaci}'");
  18. $query5 = $db->simple_select("biografia", "*", "POSTAC='{$nick_postaci}'");
  19. $biografia_pos = $db->fetch_array($query5);
  20. $zawartosc_biografi = $biografia_pos['BIOGRAFIA'];
  21. $out['ajax_result'] = 1 ;
  22. $out['txt'] = $zawartosc_biografi ;
  23.  
  24. }
  25. echo json_encode( $out ) ;


jak pisałem dane mi wysyłą dobrze gdyz moge je odczytac w skrypcie uzywając "data" bez uzycia json
Arcioch
Możesz to pokazać gdzieś live aby sprawdzić niektóre rzeczy firebugiem wink.gif
Hosiek
login: ****
haslo:****
link: *****

Obecnie bo kliknieciu "Aktualizuj" powinny pojawic sie zaaktualizowane dane z obj.txt bądź jezeli nie minelo 30 sekund to równiez lecz w innym divie.
redeemer
Cytat
  1. var obj = jQuery.parseJSON('data');

A nie przypadkiem:
  1. var obj = jQuery.parseJSON(data);
Hosiek
Cytat(redeemer @ 2.10.2012, 19:27:38 ) *
A nie przypadkiem:
  1. var obj = jQuery.parseJSON(data);

Również próbowałem - zmienilem teraz jak piszesz i dalej nic.
Arcioch
Po pierwsze popraw to wink.gif

  1. <script type="text/javascript">
  2. jQuery.noConflict();
  3. <script type="text/javascript">
  4. $.noConflict();
  5. <script type="text/javascript" src="http://[ciach]/five/jscripts/aktualizacja_bazy.js?ver=1600"></script>


Po drugie łącznie prototype i jQuery nie jest za dobrym roziwązaniem wink.gif
Po trzecie json dostaje coś więce wink.gif Tak przynajmniej pokazuje firebug wink.gif

  1. {"ajax_result":1,"txt":"testowa biografia asdasddsa"}<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Hosiek
Cytat(Arcioch @ 2.10.2012, 19:36:09 ) *
Po pierwsze popraw to wink.gif

  1. <script type="text/javascript">
  2. jQuery.noConflict();
  3. <script type="text/javascript">
  4. $.noConflict();
  5. <script type="text/javascript" src="http://[ciach]/five/jscripts/aktualizacja_bazy.js?ver=1600"></script>


Po drugie łącznie prototype i jQuery nie jest za dobrym roziwązaniem wink.gif
Po trzecie json dostaje coś więce wink.gif Tak przynajmniej pokazuje firebug wink.gif

  1. {"ajax_result":1,"txt":"testowa biografia asdasddsa"}<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

jezeli ten kod ułoze inaczej skrypty mi nie działają, chyba ze faktycznie coś na mieszkałem to powiesz cos konkretniej ?

Co do wysyłania do json, to nie mam pojecia dlatego to tak wysyla, wygladało by na to ze dostaje sie do heada ze to wyswietla - mialem wyswietlanie tego jak uzyłem zamiast .html(obj.txt) chyba head albo headbody czy jakos tak. cała akcja jest wrzucona do tego samego pliku lecz jako action= moze dlatego ?
Już wiem skąd ten kod sie bierze, jest on zdefiniowany w mybb, w szablonie htmldoctype - całkowite usuniecie go powoduje wstawienie innego, jakiegos zastepczego - ale wydaje mi sie ze moze on byc potrzebny wiec nalezy znalesc rozwiazanie które usunie go tylko z tej podstrony
Arcioch
Spróbuj dać tak wink.gif

  1. <script type="text/javascript">
  2. jQuery.noConflict();
  3. $.noConflict();
  4. <script type="text/javascript" src="http://[ciach]/five/jscripts/aktualizacja_bazy.js?ver=1600"></script>

Json nie działa przez ten dodatkowy wysyłany tekst wink.gif Ponieważ funkcja zwraca "non-whitespace character after JSON data" wink.gif
Ps zobacz PW wink.gif
Hosiek
Cytat(Arcioch @ 2.10.2012, 20:07:31 ) *
Spróbuj dać tak wink.gif

  1. <script type="text/javascript">
  2. jQuery.noConflict();
  3. $.noConflict();
  4. <script type="text/javascript" src="http://[ciach]/five/jscripts/aktualizacja_bazy.js?ver=1600"></script>

Json nie działa przez ten dodatkowy wysyłany tekst wink.gif Ponieważ funkcja zwraca "non-whitespace character after JSON data" wink.gif
Ps zobacz PW wink.gif

Tak jak mówiłem, tym sposobem nie działają mi funkcje edytora textu, tzn lista funkcji typu "wysrodkowanie" "kolor" itd..


Odbyła sie rozmowa z Arciochem i raczej rozwiazałem problem - jeszcze przepisze troche kodu - dzieki wszystkim.
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.