Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery][php] Przekazanie zmiennej, a sesja
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
k0b3
Witam!

Przymusowo zapoznaje się z frameworkiem jQuery, ponieważ wykorzystuje go do pewnego projektu.
Po woli odkrywam potencjał tego skryptu, jednak nadal mam z nim problemy.

Zatrzymałem się na prostej sprawie, mianowicie.
Zależy mi, aby móc przekazac dane do sesji.
Mam taki skrypt w js:
  1. <?php
  2. $('#pan_2').click(function () {
  3. if ($(".pan_2:first").is(":hidden")) {
  4. $(".pan_2").slideDown();
  5.  $("#cover_2").replaceWith('<img id="cover_2" src="images/cover_1.png" />');
  6.  // tu ma nastąpic przesłanie do sesji jakiegoś stringa
  7. } else {
  8. $(".pan_2").slideUp();
  9.  $("#cover_2").replaceWith('<img id="cover_2" src="images/cover_0.png" />');
  10.  // tu ma nastąpic przesłanie do sesji jakiegoś stringa
  11. }
  12. });
  13. ?>


w phpie prosto bym to zrobił:

$_SESSION['xxx'] = 'asd';
w js nie mam pojecia! tongue.gif

Jeśli się nie da, to jak za pomocą jQuery przesłac zmieną do phpa? Wypełnienie sesji zrobie sobie w php

Czekam na odp, pozdr
wookieb
W javascript sie nie da.
A do phpa masz setki sposobów
Ajaxem, w ciasteczkach. Jednakże bedziesz musial ostro zadbac o filtrowanie tych danych.
k0b3
Tak sobie myśle, a gdyby Ajaxem przez POST?

Za bardzo nie znam sie na js. Jak to można wykonac?
wookieb
Mozesz ajaxem przez posta. W jquery masz ajaxa. Poczytaj sobie jego dokumentacje. Tam wszystko pisze.
k0b3
http://docs.jquery.com/Ajax/jQuery.post

Nic a nic mi to nie mówi sad.gif Jeśli się znasz na ajaxie, js, skrobnij troche kodu.

Kod
$.post("index.php", { 'name': "John"} );

tak się definiuje zmieną POSt?
wookieb
Kod
$.post("index.php", { 'name': "John"} ,
function(data){
// tutaj piszesz swoj kod dalszej obslugi
});


no i teraz w php zmienna
Kod
$_POST['name']


bedzie miala wartosc john
k0b3
Nie działa, zrobiłęm to samo co Ty...

sad.gif

dzięki za cierpliwośc tongue.gifP
wookieb
Co masz w konsoli błędow javascript?
(najlepiej pokazuje to dodatek firebug w firefoxie).
I jak ty to uruchamiasz?
daj lepiej link do strny.
k0b3
Tak... ;-)


test.php
Kod
<script type="text/javascript" src="jquery-1.2.6.js"></script>

<script>
  $(document).ready(function(){
$.post("test.php", { name: "John"} );

});
</script>
<?

echo $_POST['name'];

?>
wookieb
strona.php
Kod
<script type="text/javascript" src="jquery-1.2.6.js"></script>

<script>
  $(document).ready(function(){
$.post("test.php", { name: "John"} );

});
</script>


test.php
Kod
print_r($_POST);


Plik test.php jest wywoływany przez ajaxa i ty tego nie widzisz bezposrednio na stronie. W pliku test.php umieszczasz sobie obsluge dodawania czego tam chcesz.
k0b3
Nadal mam z tym problem sad.gif

Usilnie próbuje przekazac tą zmienną do tego test.php, a później zapisac do sessji $_SESSION['panel']; i nic
Gdy się nie da rozwiązac problemu po prostu musze zwykle wyjaśnic do czego jest mi ten skrypt i zwykle problem rozwiązuje sie sam, a więc:

Robie CMSa i usiłuje zrobic, aby panele Reklam, Linków, Ulubionych, Ostatnio dodanych mogły się schowac gdy uzytkownik tego chce. Chce aby każdy ruch panem, czy to schowanie go czy to otworzenie zostal dopisany do sessji w taki sposób: $_SESSION['panel_1']=1 or $_SESSION['panel_1']=0. Przy otwieraniu strony panele są sprawdzane pod względem zawartości $_SESSION['panel_1,2,3,4'] i albo otwarte albo zamknięte w zależności od 0,1.
Gdy tworzy się nowa sesja (Anonymous) automatycznie dodaje wszystkie te panele jako otwarte. Teraz należałoby gdy użytkownik zmieni z otwartego na zamknięty dopisac to do sesji i tu wlasnie jest ten moj problem. NIe moge wyslac tej GLUPIEJ zmiennej do php sad.gif

W java script:
nie da się wysyłac do php zmiennej;
nie da sie zarzadzac sesjami
czego wiecej sie nie da? tongue.gif

Napisalem caly problem (moze powinienem zrobic to na samym początku) i czekam na jakieś propozycje. Jeśli macie inne pomysly chetnie wyslucham. NIe wiem jakby było to z ciasteczkami. Troche sie ich obawiam, sa nieco ryzykowne.
paziek
Nie znam się na jQuery, więc napiszę jak potrafię

JavaScript
  1. <?php
  2. //przykładowe użycie
  3. send('&co=panel_1&wartosc=1'); //wyśle do test.php wartości: $_POST['co']==='panel_1' oraz $_POST['wartosc']==='1'
  4.  
  5. function send(p) {
  6. try {var http = new XMLHttpRequest();}
  7. catch(e) {http = new ActiveXObject('Microsoft.XMLHttp');}
  8. http.open('post','test.php',true);
  9. http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  10. http.setRequestHeader("Content-length", p.length);
  11. http.setRequestHeader("Connection", "close");
  12. http.send(p);
  13. }
  14. ?>

Przypisać te dwie zmienne do sesji po stronie PHP już chyba dasz radę?
Gdybyś miał problem z przypisaniem ich po stronie JS to pisz.

Co do ich pobierania i użycia przy wejściu jakiejś osoby, to już najlepiej zrobić getem pewnie:
JavaScript
  1. <?php
  2. function getSession() {
  3. try {var http = new XMLHttpRequest();}
  4. catch(e) {http = new ActiveXObject('Microsoft.XMLHttp');}
  5. http.open('get','test.php',true);
  6. http.onreadystatechange=function() {
  7. if(this.readyState===&& this.status===200) {
  8. if(!http.responseXML) {
  9. //koleś nie ma żadnych informacji w sesji na temat ustawień interfejsu
  10. } else {
  11. var d=http.responseXML.documentElement;
  12. var panel_1 = d.childNodes[0].firstChild.nodeValue;//0 lub 1 (string, nie liczba!)
  13. var panel_2 = d.childNodes[1].firstChild.nodeValue;// 0 lub 1 (string, nie liczba!)
  14. //itd.
  15. }
  16. }
  17. }
  18. http.send(null);
  19. }
  20. ?>

test.php
  1. <?php
  2. if($_SERVER['REQUEST_METHOD']==='GET') {
  3.  if($zalogowany) {
  4.  header('Content-type: text/xml; charset=utf-8');
  5.  echo '<?xml version="1.0" encoding="utf-8"?><daneSesji><panel_1>'.$_SESSION['panel_1'].'</panel_1><panel_2>'.$_SESSION['panel_2'].'</panel_2></daneSesji>';
  6.  } else {
  7.  //nie ma sensu nic wysyłać
  8.  }
  9. }
  10. ?>

Ważne aby nie było żadnych spacji między tagami XML, bo Firefox uzna je za (słusznie) jedno z childNodes i klapa.
Można to oczywiście zrobić na różne sposoby w pętlach itp. ale to już sam kombinuj ;-)



ps. ZNACZNIE łatwiej i wydajniej będzie to zrobić w ciasteczkach, do których JavaScript ma bezpośredni dostęp.
Wiążą się z tym jednak dwa problemy:
1. Jeśli koleś jakoś zgubi ciastko, to zgubi też ustawienia. Można więc zapisywać je również do sesji i próbować odtworzyc gdyby je zgubił.
2. Ktoś może ukraść te tajne/poufne informacje o tych skrycie ukrywanych ustawieniach interfejsu biggrin.gif
lord_t
@kobemat:

Zapodaj oba pliki na których testujesz (całe lub ewentualnie jesli sa długie to mądrze przycięte)

@paziek: Po co się tak zagłębiać? Jak chcesz dodac 2 liczby to nie trzeba pisać w asemblerze. jQuery działa, błąd musi więc być gdzieś indziej.
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.