• 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

VPS Starter Arubacloud
+1 głos
270 wizyt
pytanie zadane 14 sierpnia 2019 w JavaScript przez Bartłomiej Bolesta Obywatel (1,630 p.)
zamknięte 14 sierpnia 2019 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 2019 przez Kamil Łydka Stary wyjadacz (13,600 p.)

A co dostajesz w 

var_dump($_POST);

?

komentarz 14 sierpnia 2019 przez Bartłomiej Bolesta Obywatel (1,630 p.)
array(0) { }
komentarz 14 sierpnia 2019 przez Kamil Łydka Stary wyjadacz (13,600 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 2019 przez Bartłomiej Bolesta Obywatel (1,630 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 2019 przez Kamil Łydka Stary wyjadacz (13,600 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 2019 przez Bartłomiej Bolesta Obywatel (1,630 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 2019 przez Wraith Gaduła (4,370 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 2019 przez Wraith Gaduła (4,370 p.)
edycja 14 sierpnia 2019 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 2019 przez Bartłomiej Bolesta Obywatel (1,630 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 2019 przez Wraith Gaduła (4,370 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 2019 przez Bartłomiej Bolesta Obywatel (1,630 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 2019 przez Wraith Gaduła (4,370 p.)
Ciesze się że zadziałało. Pozdrawiam

Podobne pytania

0 głosów
2 odpowiedzi 280 wizyt
pytanie zadane 20 marca 2020 w JavaScript przez saseq Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 503 wizyt
pytanie zadane 24 sierpnia 2016 w JavaScript przez Alterwar Dyskutant (7,650 p.)
–1 głos
3 odpowiedzi 230 wizyt
pytanie zadane 23 grudnia 2018 w JavaScript przez Q7V Gaduła (4,250 p.)

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...