Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP] Przesyłanie tablicy z JavaScript do php
Forum PHP.pl > Forum > Przedszkole
muumiin
Jak w temacie, potrzebuję przesłać tablicę do php. Znalazłam w googlach jakiś wzór i zrobiłam to według niego, ale nie wiem, czy instrukcje były złe, czy po prostu ja je źle zastosowałam... Może skopiuję kod java script:

  1. $(function() {
  2. /* mods */
  3. $( "#sortable2" ).sortable({
  4. update: function(event, ui) {
  5. var boxorder1 = $(this).sortable('toArray').toString(); //zapisywanie tablicy z kolejnością boxów.
  6. $("#boxorder").text (boxorder1); //wyświetlanie tej tablicy na stronie - wyświetla się, czyli poprawnie zapisana
  7. $.post('moduly.php', { boxorder1: JSON.stringify(boxorder1)}); //podobno ma to przesłać tablicę do pliku moduly.php
  8. }
  9. });
  10. });


Więc otwieram plik moduly.php, w którym jest taki kod (na razie tylko do testów):
  1. $boxorder1 = json_decode($_POST['boxorder1']);
  2. echo 'boxorder1[0] ' . $boxorder1[0]. '<br/> boxorder1[1]'. $boxorder1[1]. '<br/> boxorder1 '. $boxorder1;

A tam puściutko! wyświetlają się tylko 'stringi', nie ma żadnych wartości pod tymi zmiennymi.

Gdzie tu może być błąd? Pewnie jest to jakiś głupi błąd, ale niestety sama z tym sobie chyba nie poradzę :/
nospor
Cytat
Więc otwieram plik moduly.php
A jak ty go otwierasz?
maviozo
Najlepiej to zamiast echo daj var_dump($boxorder1); to dowiesz się dokładnie, co tam jest.
muumiin
1) za pomocą include
2) za pomocą wpisania adresu

efekt ten sam.
var_dump($boxorder1); == NULL
maviozo
No ale to przecież tak nie zadziała, bo moduly.php wygenerują coś dopiero po wysłaniu danych przez JS, a nie w trakcie generowania strony.
Są tylko 2 sposoby.

1) Pobierzesz odpowiedź PHP w trakcie wysyałania $.post i wyświetlisz przez JS.
2) Plik moduly.php zapisuje otrzymaną odpowiedź (w pliku, sesji, ciastku) i przy kolejnym odświeżeniu pobiera tę zawartość.
muumiin
a da się wysyłać $.post "na bieżąco"? Chodzi o to, że to nie jest formularz, tylko ktoś sobie przestawia boxy jak tylko chce i przy kolejnym zalogowaniu ma je mieć tak samo, jak miał przy wylogowaniu. Wiem, że przede mną jeszcze długa droga do takiego efektu, ale chodzi o to, żeby te dane byly przesyłane w momencie, gdy ktoś przesunie box.
maviozo
W takim razie powinno wystarczyć, że zapiszesz w moduly.php kolejność do ciasteczka, lub jeśli chcesz bardziej "pro" do bazy danych (ciasteczko po jakimś czasie znika, baza danych nie)
natomiast musisz jeszcze opracować sobie samo generowanie kolejności w HTML na podstawie tych danych.
muumiin
jakiś pomysł na generowanie kolejności już mam, ale na razie nie mam jeszcze z czego tego generować wink.gif

jakbyście mi podpowiedzieli, jak tą tablicę przesłać z javascript do php - bardzo by mi to ułatwiło... Może ta metoda JSON wcale nie jest poprawna? W jakimś przykładzie w googlach to widziałam, ale w manualu nie mogę znaleźć niczego podobnego...
lord2105
po 1
jeżeli chcesz tworzyć JSONa ze stringa no to nie tędy droga

  1. var boxorder1 = $(this).sortable('toArray');


powinno być tak

po 2 czy twoje elementy do sortable posiadają atrybuty ID w htmlu? jeżeli nie to masz pustą tablicę już w samym jsie

  1. $(this).sortable('toArray', {attribute: 'jakisattr'})


Jeżeli natomiast, jak napisałeś sam w komentarzu tablica wyswietla się no to tak zgodzę się ale wyświetla się string a ty w

prubujesz zrobić kolejny

  1. JSON.stringify(boxorder1)
muumiin
sama funkcja działa dobrze, mam id w htmlu.

Może przypomnę pytanie.
Chodzi mi tylko o to, potrzebuję zapisać te dane gdzieś na serwerze lub w bazie danych, a to można zrobić tylko z poziomu php. Ktoś na jakimś forum napisał, że aby przesłać dane do pliku php używa się metody JSON, ale to nie działa. Może to trzeba zrobić całkiem inaczej? Dziś coś czytałam o AJAXie, ale jak na razie w ogóle nie ogarniam...
trueblue
Z Twojego pierwszego postu wynika, że konwertujesz tablicę do stringa, po czym chcesz tego stringa zamienić w stringa za pomocą JSON.stringify.
maviozo
Kod
Dziś coś czytałam o AJAXie, ale jak na razie w ogóle nie ogarniam...
Tak naprawdę Twoje wcześniejsze $.post() to nic innego jak skrót od $.ajax(), i obie korzystają właśnie z ajaxa smile.gif
Sam pomysł z jsonem nie jest zły, ale podejrzewam, że podobnie sprawiłby się serialize(), które możesz wysłać i odczytywać jako tablica $_POST.
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.