Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z POST poprzez ajax
misty
post
Post #1





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


Czesc, mam nastepujacy problem: Mam sobie menu - kazda opcja w menu to link do kolejnej str. W definicji linka dla kazcej strony istnieje metoda:

  1. "onClick = \"unsetSelectedValuesFromPreviousPage();\""


Menu jest tworzone po stronie php. Ta metoda w js ma nastepujaca postac:

  1. function unsetSelectedValuesFromPreviousPage(){
  2.  
  3.  
  4. $.ajax({
  5. url : 'ajax_unset_value_from_session.php',
  6. cache : false,
  7. type : "POST",
  8. data : {
  9. unsetSelectedValues : 'true'
  10. }
  11. });
  12. }


Jej zadaniem jest wyczyszczenie tego co bylo w sesji w poprzedniej stronie. (Nie moge czyscic sesji za kazdym razem gdy wyswietlam str, poniewaz jak bede odswiezac albo submitem wykonywac akcje na tej samej str - to bede tracic rzeczy z sesji. A sa one mi potrzebne "per strona"). Czyszczenie sesji ma sie odbywac na zmiane zakladki (strony). Ok, w skrypcie ajax_unset.. mam tak:

  1.  
  2. <?php
  3.  
  4.  
  5. if ($_POST['unsetSelectedValues'] == 'true') {
  6.  
  7. $_SESSION['field_1'] = '';
  8. $_SESSION['field_2'] = '';
  9. $_SESSION['field_3'] = '';
  10. $_SESSION['field_4'] = '';
  11.  
  12.  
  13. }
  14.  
  15. ?>


I teraz to co najgorsze - to sie raz wykonuje, a raz nie! Tzn przy wejsciu na zakladke nowa wypisuje sobie var_dump te wartosci ($_SESSION['field_1'], $_SESSION['field_2']..) i raz sa '' czyli tak jak powinno byc, a raz na pare razy zawieraja poprzednie wartosci! Wiem ze to wrozenie z fusow, ale totalnie nie przychodzi mi do glowy co ja moge miec zle. Robie session_start bo tego wymaga to by to zadzialalo, myslalam ze moze tworzy sie przez to jaka druga sesja i no jakos nie zawsze wspolgra z ta 1sza. Probowalam niszczyc sesje na koncu skryptu ajax_unset.. ale wtedy mnie wylogowywuje.. Czy ktos z Was ma moze jakis pomysl?

pzdr,
misty
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
cudny
post
Post #2





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


Ja mam, zrób tak:
  1. $.ajax({
  2. url : 'ajax_unset_value_from_session.php',
  3. cache : false,
  4. type : "POST",
  5. data : {unsetSelectedValues : 'true'},
  6. success: function(data) {
  7. console.log(data);
  8. }
  9. });
  10.  

i tak:
  1. <?php
  2.  
  3. echo 'ajax sie wykonal, ponizej powinno pojawic sie, ze ok:<br />'."\n";
  4. if ($_POST['unsetSelectedValues'] == 'true') {
  5. echo 'tak - jest post i czysci nam sesje';
  6. $_SESSION['field_1'] = '';
  7. $_SESSION['field_2'] = '';
  8. $_SESSION['field_3'] = '';
  9. $_SESSION['field_4'] = '';
  10.  
  11.  
  12. }
  13.  
  14. ?>


Po wykonaniu ajax'a zobacz co masz w konsoli
Go to the top of the page
+Quote Post
misty
post
Post #3





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


Czesc, dzieki za pokazanie jak wypisywac na konsole, nie znalam tego. Niestety z tego co widze to bug musi lezec gdzies indziej. Za kazdym razem dostaje info ze kod sie wykonal, czyli ze ok. Wyglada na to ze:

1. Albo $_SESSION['field_1'] = '' nie dziala i trzyma poprzednia wartosc, ale to chyba niemozliwe by to nie dzialalo (IMG:style_emoticons/default/smile.gif)
2. Albo cos mi zaraz tam wstawia wartosc.


pzdr

Wiesz co, potestowalam troche wiecej i teraz mialam przypadek kiedy sie ten ajax nie wywolal. Ale na konsoli nic sie nie pojawilo.. wiec tropu brak :/
Go to the top of the page
+Quote Post
cudny
post
Post #4





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


Podaj pełny kod "onClick = \"unsetSelectedValuesFromPreviousPage();\""

Do tego powiedz czy przypadkiem nie generujesz dynamicznie tych zdarzeń, bo jeśli tak to musisz użyć jQuery.live();
Go to the top of the page
+Quote Post
misty
post
Post #5





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


Wiesz co, ja to menu mam tworzone po str php, poniewaz na podstawie typow i podtypow (co jest trzymane w bazie) to jest budowane. Czyli jest tam for i pare warunkow, ale dla kazdego elementu menu jest dodawane:

  1. $onClickPage = "onClick = \"unsetSelectedValuesFromPreviousPage();\"";
  2.  
  3. $navmenu .= "\n<li ".$style." ".$name." ".$id."><a href=\"".$page['full_page_name']."\" ".$onMouseDown."
  4. onmouseover=\"Tip('".$page['description']."');\" onmouseout=\"UnTip();\" ".$onClickPage.">".$prefix.$page['name']."</a></li>";
  5.  


w onClickPage jest ta metoda. A z tym live to o co chodzi?

A jesli chodzi o pelny kod tej metody, to podawalam w 1szym poscie:

  1. function unsetSelectedValuesFromPreviousPage(){
  2.  
  3.  
  4. $.ajax({
  5. url : 'ajax_unset_value_from_session.php',
  6. cache : false,
  7. type : "POST",
  8. data : {
  9. unsetSelectedValues : 'true'
  10. }
  11. });
  12. }
Go to the top of the page
+Quote Post
cudny
post
Post #6





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


No to w takim wypadku błędem jest to, że jakaś zmienna może być nieprawidłowo generowana i wywala ci to on click (tak mi się wydaje).
Poczytaj: http://api.jquery.com/live/

Wywal w php to $onClickPage i na stronie gdzie znajduje się ten link daj na samym dole w sekcji body (tylko nadaj temu odnośnikowi klasę: unset - <a href="xxx" class="unset">...</a>):

<script>
$(a.unset).live('click',function() {
unsetSelectedValuesFromPreviousPage();
});
</script>

Go to the top of the page
+Quote Post
misty
post
Post #7





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


Hej, ten kod:
Kod
$(a.unset).live('click',function() {
unsetSelectedValuesFromPreviousPage();
});


To mi wywalal w konsoli ze"a" jest undefinied, wiec zmienilam na:

Kod
$("a.unset").live('click',function() {
unsetSelectedValuesFromPreviousPage();
});


chociaz nie wiem czy to jest poprawnie - tak czy siak nie dziala :/ juz mam powoli dosc, totalnie nie kapuje co tu sie dzieje. Moze powinnam zmienic podejscie i jako str php czyscic te wartosci z sesji zamiast metody onClick i ajax'a..

Ten post edytował misty 16.03.2012, 11:43:46
Go to the top of the page
+Quote Post
cudny
post
Post #8





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


Dobrze zrobiłeś, po prostu pisałem z palca, w normalnych warunkach poprawiło by mnie moje IDE (IMG:style_emoticons/default/tongue.gif)

Musisz poczytać, w jaki sposób korzystać z jQuery, bo w ogóle go nie wykorzystujesz !
Nie generuj eventów dynamicznie w php - po co ? Od tego właśnie masz (moim zdaniem) najlepszy framework czyli jQuery (IMG:style_emoticons/default/smile.gif)

Nie napisałeś jednak, co się dzieje w chwili, gdy nie czyści Ci sesji - czy ajax w ogóle się wykonuje ? Czy konsola wyrzuca cokolwiek ? Czy nic się nie dzieje po prostu ?
Czy ten link zmienia się w chwili kliknięcia w niego ?
Tak na prawdę nic nie wiem o twoim skrypcie (IMG:style_emoticons/default/smile.gif) w ciemno nie pomogę niestety.

Porponuję mniej php więcej javascript (jQuery) i nie korzystanie z eventów (onClick, czy onMouseDown) wewnątrz tagów - lepiej tak jak Ci pokazałem, użyj jQuery - mniejsza możliwość pomyłki i wszystko na patelni (IMG:style_emoticons/default/smile.gif)


Acha - zrób sobie jeszcze jeden test - wywal z tego linka wszytko oprócz onClick i zobacz czy wtedy wszytko jest ok, jeśli tak to znaczy, że inne eventy mają nieprawidłową składnie. Może gdzieś nie zamykasz " czy otwierasz ' i nie zamykasz go - musisz przepatrzeć wszystko

Ten post edytował cudny 16.03.2012, 12:16:36
Go to the top of the page
+Quote Post
misty
post
Post #9





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


Jestem Ona a nie On (IMG:style_emoticons/default/smile.gif)

jesli chodzi o ajax'a - to wlasnie kiedy sie nie wykonuje to konsola nie rzuca mi zupelnie nic (wykorzystalam by to sprawdzic "always" zamiast "sucess").
Chyba sie po prostu z tym poddaje i na prawde zrobie to po str php tymbardziej ze mam odpowiednie miejsce na wywolanie "czyszczacej metody" - zadziala dla kazdej zakladki. A tutaj po prostu nie wiadomo co sie dzieje. Raz sie ten ajax wykonuje i jest ok, raz sie wykonuje ale nie jest ok (dane nie sa czyszczone albo cos je tam znow wrzuca), innym razem w ogole sie nie wykonuje ale konsola nic nie rzuca. Za duzo juz czasu mi na tym zeszlo. Odpuszczam ten sposob, ale dzieki za wszystkie rady i probe pomocy.

pzdr,
misty
Go to the top of the page
+Quote Post
cudny
post
Post #10





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


To znaczy, że masz błędy w składni i event się nie wykonuje. Poczytaj o events jQuery i zrób to poprawnie, a będziesz używać ajax'a z uśmiechem (IMG:style_emoticons/default/wink.gif)
A co do ON a nie ONA to z przyzwyczajenia (IMG:style_emoticons/default/wink.gif) sorki (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
mortus
post
Post #11





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Problem w tym, że żadanie AJAX-owe po prostu nie zdąży się wykonać zanim nastąpi przejście do określonej strony. Tzn. kliknięcie w odnośnik uruchamia AJAX-owego requesta, ale powoduje również prawie natychmiastowe przejście do wybranej strony. W momencie przejścia do tej wybranej strony żadanie AJAX-owe zostaje przerwane. Rozwiązaniem może być zmuszenie AJAX-a do pracy synchronicznej (opcja async). Może to jednak spowodować skutki uboczne (przejście z jednej strony na inną może trwać zbyt długo i użytkownik nie będzie mógł nic w tym czasie zrobić).
Nie znam założeń całego systemu, ale używanie AJAX-a tylko do czyszczenia sesji (i to jeszcze tuż przed opuszczeniem danej strony) to chyba lekkie nadużycie i być może trzeba się zastanowić nad innym rowiązaniem.
Go to the top of the page
+Quote Post
celbarowicz
post
Post #12





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

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


To jeden ze sposobów w jaki wykorzystyję JQ i Ajax.
  1. function notatnik_szukaj2(){ $(document).ready(function(){ var zm1=$('#sel_szukaj_k').val();
  2. var zm2=$('#rok_szukaj').val();
  3. var zm3=$('#miesiac_szukaj').val();
  4. var zm4=$('#dzien_szukaj').val();
  5. var data = 'a1='+zm1+'&'+'a2='+zm2+'&'+'a3='+zm3+'&'+'a4='+zm4;
  6.  
  7.  
  8.  
  9. $.ajax({type:"POST",
  10. url:"notatnik_szukaj2x.php",
  11. data: data,
  12. success: function(){ $('#okno_konsultanta1').load('notatnik_szukaj2.php');
  13. }
  14. });
  15. });
  16.  
  17. }
  18.  
  19.  

notatnik_szukaj2x.php
  1. <?php
  2. $_SESSION['sel_szukaj_k']=$_POST['a1'];
  3. $_SESSION['rok_szukaj']=$_POST['a2'];
  4. $_SESSION['miesiac_szukaj']=$_POST['a3'];
  5. $_SESSION['dzien_szukaj']=$_POST['a4'];
  6. ?>


notatnik_szukaj2.php
  1.  
  2. $u=$_SESSION['sel_szukaj_k'];
  3. $r=$_SESSION['rok_szukaj'];
  4. $m=$_SESSION['miesiac_szukaj'];
  5. $d=$_SESSION['dzien_szukaj'];
  6. $_SESSION['wybrana_data']=$r1=$r.'-'.$m.'-'.$d;
  7. $rw=strtotime($r1)+1;
  8.  
  9. $cp=date("Y-m-d H:i:s",strtotime($r1));
  10.  
  11. $r2=strtotime($r1)+24*60*60-1;
  12. $ck=date("Y-m-d H:i:s",$r2);
  13.  
  14. $pcz_dnia = strtotime($cp);
  15. $koniec_dnia = strtotime(($ck));
  16. require_once ('do_bazy.php');
  17.  
  18. $sql="SELECT * FROM notes WHERE uzytkownik_notes='$u' AND'$pcz_dnia'<poczatek_notes AND poczatek_notes<'$koniec_dnia' ORDER BY poczatek_notes asc";
  19. $result=mysql_query($sql) or die(mysql_error());
  20.  
  21. $n = mysql_num_rows($result);
  22.  
  23. if(mysql_num_rows($result)==0){echo 'WYBRANA DATA='.date("Y-m-d",strtotime($r1));
  24. echo'<br>';
  25. echo 'wolne od'.date("H:i:s",$rw).'do godziny'.date("H:i:s",$r2);
  26. echo '<br>';
  27. require_once "pierwszy_wpis.php";
  28.  
  29.  
  30. }else{
  31. echo 'WYBRANA DATA='.date("Y-m-d",strtotime($r1));
  32. echo'<br>';
  33. require_once "druk.php";
  34. }
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41. ?>

Może to jest kiepski sposób ,ale działa.
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: 9.10.2025 - 21:56