Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js -> php] Przekazanie dużej ilości danych
Forum PHP.pl > Forum > Przedszkole
phpion
Witam,
w jaki sposób mogę przekazać sporą liczbę znaków z formularza poprzez JS do PHP?
Mam takie coś: formularz, w którym jest zwykłe pole textarea, w którym wpisuję tekst. Pod spodem mam przycisk 'Podgląd' i po jego wciśnięciu chciałbym otworzyć okienko popup, w nim odebrać zawartość pola textarea i przelecieć ją w PHP funkcją markdown().
Chciałem wysłać cookie (w JS) z zawartością pola przed otwarciem popupa i odebrać je w PHP ale nie bardzo chce to działać:
  1. function preview() {
  2. var description = document.getElementById('article_description').value;
  3.  
  4. SetCookie('preview', description);
  5. openPopUp(backend + '/article/preview', 800, 600);
  6. }

  1. <?php
  2. if (isset($_COOKIE['preview'])) {
  3. echo $_COOKIE['preview'];
  4.  
  5. unset($_COOKIE['preview']);
  6. }
  7. ?>

Powyższy kod nie wyświetla nic (SetCookie z http://www.acm.uiuc.edu/webmonkeys/javascript/cookies.js). Gdy przekażę zmienną preview metodą GET i w ten sposób odbiorę ją w PHP wszystko jest ok do momentu zbyt dużej ilości tekstu (a właśnie chcę przesyłać sporą ilość):
  1. Request-URI Too Large
  2.  
  3. The requested URL's length exceeds the capacity limit for this server.

Czy znacie jakiś sposób na rozwiązanie tego problemu?
sticker
możesz zmienić ustawienia apache ?
b_chmura
proponuje użyć linlk
phpion
Ustawień Apache nie bardzo mogę zmienić (u siebie tak ale na serwerze docelowym już nie). AdvAJAX? Hmmm nie bardzo widzę jak to zrobić z otwieraniem podglądu w nowym oknie. Możnaby coprawda zrzucić zawartość pola do pliku, otworzyć okno i w nim pobrać dane z tego pliku ale to by było chyba zbyt przekombinowane.
Jakieś inne pomysły?
Przekazywanie danych poprzez URL jednak odpada z racji występowania znaków typu np. #. Możnaby coprawda je kodować i przy odbiorze dekodować... ale może jest inne wyjście?
b_chmura
dzięki AdvAJAX możesz sporą liczbę znaków przesłać POST'em
phpion
No tak, fajnie, tylko jakoś nie bardzo wiem jak widziałbyś zastosowanie tego w moim przypadku (click w 'Preview' -> otworzenie popupa -> wyświetlenie zawartości pola ze strony otwierającej po przefiltrowaniu funkcją markdown()). Mógłbyś mi to opisać?
batman
A nie prościej będzie wysłać formularz do okna pop-up? Ustawiasz przy pomocy javascrit target i action. Mniej więcej tak to będzie wyglądać:

  1. function funkcja() {
  2. document.forms["formularz"].action = "twoj_skrypt.php";
  3. document.forms["formularz"].target = "_blank";
  4. document.forms["formularz"].submit();
  5. }
  6. </head>
  7. <form name="formularz" method="post" action="index.html">
  8. <textarea name="pole"></textarea>
  9. <input type="button" value="pogdlad" onclick="funkcja();" />
  10. </form>
  11. </body>
  12. </html>

Pisane z palca, więc mogłem gdzieś się machnąć.

Zapomniałem dodać, że w pliku php dostęp do zmiennej uzyskasz poprzez tablicę $_POST
Cienki1980
A może zrobić tak:

- otwierasz popupa
- w onLoad dajesz funkcje przypisująca wartości z formularza ( za pomocą opener.window.IDpola.value ) do zmiennych w popupie
- dalej w onLoad wywołujesz ajaxa, który pobierze te zmienne ( już z popupa ) i przerobi je funkcją w php
- funkcja ajaxowa wyświetli co trzeba w popupie
phpion
smile.gif
Dzięki wszystkim za zainteresowanie i pomoc. Finalnie wykorzystałem kod batmana - jest zdecydowanie najprostszy i działa dokładnie tak jak chciałem. Niemniej jednak jeszcze raz wam dziękuję smile.gif

Mała edycja - może komuś się przyda. Po wysłaniu formularza do nowego okna należy ponownie przypisać starą akcję i okno docelowe:
  1. function preview() {
  2. document.forms["sf_admin_edit_form"].action = backend + '/article_page/preview';
  3. document.forms["sf_admin_edit_form"].target = "_blank";
  4. document.forms["sf_admin_edit_form"].submit();
  5.  
  6. // przypisanie starych wartosci
  7. document.forms["sf_admin_edit_form"].action = backend + '/article_page/save';
  8. document.forms["sf_admin_edit_form"].target = "_self";
  9. }

W przeciwnym wypadku kliknięcie na submit formularza prześle go do nowej akcji i nowej strony docelowej.
Teraz działa wybornie (przynajmniej na Operze i FF smile.gif )

Edit:
Pozwalam sobie wrócić do tego tematu. Czy jest możliwość aby przes wysłaniem formularz otworzyć popup i do niego skierować formularz?
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.