Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][AJAX] serializacja (?)
peter13135
post
Post #1





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Zrobiłem bardzo głupi błąd :/
Mianowicie piszę skrypt forum (już chyba drugi rok) i sporo jest tam ajaxa, początkowo był to xajax, niedawno przerobiłem to na swojego prostego frameworka ajax.

funkcja do ajaxa (nie szukajcie błędów, czytajcie dalej) :

  1. //ajax function
  2. var xmlhttp;
  3. if (window.XMLHttpRequest)
  4. {// code for IE7+, Firefox, Chrome, Opera, Safari
  5. xmlhttp=new XMLHttpRequest();
  6. }
  7. else
  8. {// code for IE6, IE5
  9. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  10. }
  11. xmlhttp.onreadystatechange = function()
  12. {//Call a function when the state changes.
  13. if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
  14. {
  15. eval(xmlhttp.responseText);
  16. //alert(xmlhttp.responseText);
  17. }
  18. }
  19. function ajax_post(url, params, get)
  20. {
  21. xmlhttp.abort();
  22. alert(params);
  23. xmlhttp.open("POST", url + '?ajax=1&' + get, true);
  24. xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  25. xmlhttp.setRequestHeader("Content-length", params.length);
  26. xmlhttp.setRequestHeader("Connection", "close");
  27. xmlhttp.send(params);
  28. }



funkcję tą wywołuję w taki sposób (taki mały przykład)
  1. <button onclick="ajax_post('plik.php', 'wartosc=' + document.getElementById('JakasTextarea').value)">kliknij tutaj</button>


funkcja działa elegancko... no prawie, jest jedno "ale"

jeśli jakasTextarea będzie miała zawartość typu:
Kod
Witam wszystkich userów, czy ktoś mi powie do czego służy znacznik & w php ?


to wtedy drugi parametr dla funkcji ajax_post będzie wyglądał tak:
Kod
wartosc=Witam wszystkich userów, czy ktoś mi powie do czego służy znacznik & w php ?


a skrypt php :
  1. if(isset($_POST['wartosc']))
  2. {
  3. echo $_POST['wartosc']);
  4. }

wyświetli tylko:
Kod
Witam wszystkich userów, czy ktoś mi powie do czego służy znacznik

czyli nie to co oczekiwałem

Jak proponujecie rozwiązać ten problem ?
Go to the top of the page
+Quote Post
mat-bi
post
Post #2





Grupa: Zarejestrowani
Postów: 690
Pomógł: 92
Dołączył: 6.02.2011

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


http://www.w3schools.com/jsref/jsref_encodeURIComponent.asp ?
Go to the top of the page
+Quote Post
peter13135
post
Post #3





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


czyli zamiast

  1. <button onclick="ajax_post('plik.php', 'wartosc=' + document.getElementById('JakasTextarea').value)">kliknij tutaj</button>

ma być
  1. <button onclick="ajax_post('plik.php', 'wartosc=' + encodeURIComponent(document.getElementById('JakasTextarea').value))">kliknij tutaj</button>


?
nie chciałbym potem kilkarazy tego przerabiać

Ok, zakładam że tak. W każdyb bądź razie, uważam że to nie najlepszy pomysł żeby tak pisać:
  1. 'wartosc=' + encodeURIComponent(document.getElementById('JakasTextarea').value) + '&wartosc2=' + encodeURIComponent(document.getElementById('jakisDiv').innerHTML)

myślałem o tym, żeby wrzucić to do tablicy i potem by ajax_post to przerabiał na string.... tylko że jak zrobić taką tablicę ?
  1. Array("wartosc"=>document.getElementById('aaa').value);
nie działa. Macie jakieś pomysły ?

Ten post edytował peter13135 24.05.2011, 13:42:01
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Podstawy JS... od kiedy to niby tablice w JS obsługują indeksy inne niż numeryczne? Dlaczego nie skorzystasz z jQuery, DOJO, MooTool czy czegoś tam jeszcze innego co udostępnia sensowny interfejs do obsługi AJAX-a?
Go to the top of the page
+Quote Post
peter13135
post
Post #5





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Cytat(Crozin @ 24.05.2011, 15:24:23 ) *
Podstawy JS... od kiedy to niby tablice w JS obsługują indeksy inne niż numeryczne?

Nie wiem od kiedy, ale obsługują.
tablica["lalala"] = "blabla";

  1. Dlaczego nie skorzystasz z jQuery, DOJO, MooTool czy czegoś tam jeszcze innego co udostępnia sensowny interfejs do obsługi AJAX-a?

Bo nie chcę budować mostu nad kałużą i mam taki kaprys że chce to zrobić w js (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
yevaud
post
Post #6





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

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


json

[JAVASCRIPT] pobierz, plaintext
  1. var assarray = {'nazwa': wartosc, 'nazwa2': 'jakis string'}
  2.  
  3. for (var i in assarray)
  4. alert(assarray[i]);
[JAVASCRIPT] pobierz, plaintext


generalnie w js tablice asocjacyjne to takie nie do konca tablice, a obiekty to takie nie do konca nie-tablice (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
peter13135
post
Post #7





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Wygląda nieźle.. ale czy da się odczytać zarówno klucz jak i wartość? niestety nic nie wygooglałem (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
celbarowicz
post
Post #8





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

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


W JQ dzieje się to samo. To jest chyba cena-> "Strona bez przeładowania".
Go to the top of the page
+Quote Post
CuteOne
post
Post #9





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


jquery ajax, jquery json, jquery post json ... pierwszych pięć poradników odpowie na wszystkie pytania...
Go to the top of the page
+Quote Post
celbarowicz
post
Post #10





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

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


Czy zamiast & wpiszesz taki tekst 'xxxxx' ?

Ten post edytował celbarowicz 25.05.2011, 07:56:20
Go to the top of the page
+Quote Post
peter13135
post
Post #11





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Niestety, ale na podstawie kursu jQuery, nie potrafię zrobić tego w js.
Proszę, aby ktoś mi napisał, jak odczytać klucz w obiekcie JSON za pomocą samego js, bez żadnych frameworków.
dla przykładu :
  1. var jsonObject = {'nazwa': 'wartosc'};

chcę odczytać stąd 'nazwa'
Go to the top of the page
+Quote Post
zegarek84
post
Post #12





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


w tym poście masz odpowiedź:
http://forum.php.pl/index.php?s=&showt...st&p=866118

wartość zmiennej "i" przechowuje klucz a sama konstrukcja pętli for(i in obiekt) jest odpowiednikiem pętli foreach z PHP...
Go to the top of the page
+Quote Post
Crozin
post
Post #13





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
Nie wiem od kiedy, ale obsługują.
tablica["lalala"] = "blabla";
Bo dla każdego obiektu w JS - a wszystko jest obiektem* - możesz dodać nowe właściwości. To zadziała tak samo dobrze z obiektem RegExp, String czy Console. Powinieneś po prostu użyć czystego obiektu (Object), który w zamyśle służy właśnie do tego - można przy jego pomocy tworzyć coś na wzór tablic asocjacyjnych.
Cytat
Bo nie chcę budować mostu nad kałużą i mam taki kaprys że chce to zrobić w js
Pomijając fakt, że te biblioteki same w sobie są zrobione w JS to czemu nie? Jak masz go dostępnego pod ręka i w praktyce jego użycie nie kosztuje nic?

* A to co nie jest (typy proste) obsługuje dynamiczne rzutowanie na odpowiedni typ obiektowy w tle.

Ten post edytował Crozin 25.05.2011, 12:04:05
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 - 11:16