• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Przesłanie zmiennej z JS do PHP Ajaxem

+1 głos
83 wizyt
pytanie zadane 14 sierpnia w JavaScript, jQuery, AJAX przez Bartłomiej Bolesta Obywatel (1,220 p.)
zamknięte 14 sierpnia przez Bartłomiej Bolesta

Nie mogę kompletnie zrozumieć jak to zrobić. Zacząłem nawet przeklejać różne kody 1:1, żeby tylko zobaczyć w jaki sposób to działa i kompletnie nic mi nie chcę działać. Nie wiem czy pomijam jakąś oczywistość o której się nie wspomina w przykładach czy jaki pies? 

Poniżej jeden z przykładów, który prawie zadziałał wraz z dodatkiem ode mnie w postaci zmiennej timzone.

plik js:

$(document).ready(function(){

	var tz = jstz.determine(); 
    var timezone = tz.name(); 

	$.ajax({
        type: "POST",   
        url: "phpfiles/ajaxphpfiles/test.php",       
        data: {
			zmienna: timezone
		},
        success: function() {
            console.log(timezone);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(textStatus, errorThrown);
        }
    });
});

plik php:
 

$result = [ //nowsza składnia
    "zmienna" => $zmienna,
];

$_SESSION['TimeZone'] = $zmienna;

Lub:

echo $_POST['zmienna'];

W obu przypadkach dostaje po prostu:

Notice: Undefined index: zmienna in"

Kompletnie nie rozumiem czemu. W pliku js odpala się success i w consoli wyświetla strefę czasową (niedokładnie, bo niedokładnie, jeśli chodzi o nazwę, ale w tej samej strefie).

Jak poprawnie odebrać w pliku php tą zmienną i zrobić z niej zmienną sesyjną?

komentarz zamknięcia: Rozwiązano problem.
1
komentarz 14 sierpnia przez Kamil Łydka Stary wyjadacz (12,910 p.)

A co dostajesz w 

var_dump($_POST);

?

komentarz 14 sierpnia przez Bartłomiej Bolesta Obywatel (1,220 p.)
array(0) { }
komentarz 14 sierpnia przez Kamil Łydka Stary wyjadacz (12,910 p.)

No to wychodzi na to że w ogóle niczego nie dostajesz. Wygląda w miarę zdrowo, oprócz tego type: "POST", ale type to chyba allias dla method. Zacząłbym od upewnienia się czy na pewno podajesz poprawnie ścieżkę (przypuszczam że nie) i na czas testów sobie przemień na GET, będziesz widział w pasku przeglądarki czy cokolwiek dostajesz. 

komentarz 14 sierpnia przez Bartłomiej Bolesta Obywatel (1,220 p.)

Ścieżka jest prawidłowa. Jeśli w niej namieszam, wtedy dostaje consoleloga: error Not Found.

Ale ogólnie robię to tak:

index.php => includuje test.php, potem w head daje: 
 

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js"></script>
<script type="text/javascript" src="scripts/timezone.js"></script>

Zastanawiałem się czy z kolejnością nie jest problem, ale includowanie pliku po odwołaniu do skryptu nic nie zmieniło. Także w samym indexie próbowałem, ale post nadal pusty.

oprócz tego type: "POST", ale type to chyba allias dla method.

 

Tak. Spróbowałem podmienić na method w razie czego, ale to nic nie dało. 

1
komentarz 14 sierpnia przez Kamil Łydka Stary wyjadacz (12,910 p.)
No to niestety musisz czekać na kogoś kto używa na co dzień ajaxa. Pewnie jakaś błahostka. Celowo nie użyłem opcji odpowiedzi, żeby nie oznaczać postu mylnie z odpowiedzią, a sam dawno ajaxa nie używałem. :)

Jedyne co mi przychodzi jeszcze do głowy to ustawić odpowiedni dataType (spróbuj z 'json'). Powodzenia
komentarz 14 sierpnia przez Bartłomiej Bolesta Obywatel (1,220 p.)

Z początku miałem tak ustawione właśnie, ale wtedy dostawałem w consoli błąd na który nawet nie mogłem znaleźć odpowiedzi, nie takiej, która by coś pomogła:

parsererror SyntaxError: Unexpected token < in JSON at position 0
    at parse (<anonymous>)
    at jquery.min.js:2
    at l (jquery.min.js:2)
    at XMLHttpRequest.<anonymous> (jquery.min.js:2)

 

1 odpowiedź

0 głosów
odpowiedź 14 sierpnia przez Wraith Gaduła (4,340 p.)

Otóż zrób tak:

$.ajax({
        type: "POST",   
        url: "phpfiles/ajaxphpfiles/test.php",       
        data: {
            "zmienna": "timezone"
        },
        success: function(data) {
            console.log(data);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(textStatus, errorThrown);
        }
    });

Przesylajac cos jako data wysylsz do pliku PHP z tego pliku wychodzi ci opdoiwedz wiec wpisanie timezone w console nie ma prawa ci nic zwrocic. to co ci zwroci php bedzie w DATA o ile dasz to data tutaj success: function(data)

Oczywiscie nic nie stoi na przeszkodzie bys dal kod

success: function(calineczka) {
            console.log(calineczka);
        },

 

1
komentarz 14 sierpnia przez Wraith Gaduła (4,340 p.)
edycja 14 sierpnia przez Wraith
Zgadza sie masz błąd logicznie to wygląda tak.

Jesteś listonoszem. Wchodzisz do pracy (index.php) i bierzesz bierzesz pudełko z listami (include test.php) patrzysz a to pudełko jest puste ponieważ nikt nie wysłał listu POST (czyli nie wrzucił listu do skrzybki pocztowej wiec nie dotarł na poczte do twojego pudełka). Zatem dla ciebie na pytanie (var_dump($_POST['zmienna'])) czy jest list o nazmwie zmienna mowisz: Undefined index: zmienna

Bo nie masz listu bo nikt go nie wyslal AJAXEM jeszcze zgadza sie ?

Pytanie moje jest nastepujące. Co ma robic twoj lik test.php co chcesz zrobic kiedy będziesz już mał tą zmienna $_POST['zmienna'] - to co ma sie z nia stac ?
komentarz 14 sierpnia przez Bartłomiej Bolesta Obywatel (1,220 p.)

Ma włożyć wartość do zmiennej sesyjnej:

$_SESSION['TimeZone'] = $_POST['zmienna']


Bo nie masz listu bo nikt go nie wyslal AJAXEM jeszcze zgadza sie ?

Ok. Czyli tak jak myślę, czegoś nie rozumiem, coś pomijam. Więc w jaki sposób mam to wysłać? Czemu to

 

$(document).ready(function(){
 
    var tz = jstz.determine(); 
    var timezone = tz.name(); 
 
    $.ajax({
        type: "POST",   
        url: "phpfiles/ajaxphpfiles/test.php",       
        data: {
            zmienna: timezone
        },
        success: function() {
            console.log(timezone);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(textStatus, errorThrown);
        }
    });
});

Nie wykonuje swojej pracy?

1
komentarz 14 sierpnia przez Wraith Gaduła (4,340 p.)

Wykonuje swoja prace zatem jeśli chcesz wlozyc to do zmiennej sesyjnej zrob tak:

1. z pliku index.php wywal include test.php ten plik nie ma byc nigdzie zalaczony jest on tylko do uzytku ajaxowego 

2. wpliku test.php daj

<?php
session_start();
$_SESSION['TimeZone'] = $_POST['zmienna'];
?>

3. w pliku index.php daj

<?php
session_start();
var_dump($_SESSION['TimeZone']);
?>

i wejdz na strone index.php. a potem ja odswiez i powinenes zobaczyc zaktualizowana zmienna

komentarz 14 sierpnia przez Bartłomiej Bolesta Obywatel (1,220 p.)

1. z pliku index.php wywal include test.php ten plik nie ma byc nigdzie zalaczony jest on tylko do uzytku ajaxowego 

A więc tu był błąd! Za daleko poleciałem. No i teraz działa. 
Zupełnie nie pomyślałem, że przecież już się odwołuje do test.php, gdy włącze skrypt. Miałem w głowie cały czas, że muszę ty jakoś to włączyć.

Samo odświeżanie strony, żeby mieć tą zmienną byłoby słabe, ale nie potrzebuje jej na indexie, tylko po zalogowaniu ze strony indexu tak jak miało być. Wielkie dzięki.

1
komentarz 14 sierpnia przez Wraith Gaduła (4,340 p.)
Ciesze się że zadziałało. Pozdrawiam

Podobne pytania

0 głosów
2 odpowiedzi 215 wizyt
pytanie zadane 24 sierpnia 2016 w JavaScript, jQuery, AJAX przez Alterwar Mądrala (7,280 p.)
–1 głos
3 odpowiedzi 138 wizyt
pytanie zadane 23 grudnia 2018 w JavaScript, jQuery, AJAX przez Q7V Gaduła (4,300 p.)
0 głosów
1 odpowiedź 151 wizyt
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

67,091 zapytań

114,027 odpowiedzi

241,646 komentarzy

47,017 pasjonatów

Przeglądających: 107
Pasjonatów: 0 Gości: 107

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...