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

[JS] Mały problem z ajaxem

Object Storage Arubacloud
0 głosów
286 wizyt
pytanie zadane 27 września 2020 w JavaScript przez Marak123 Stary wyjadacz (11,190 p.)

Mam problem z wysłaniem zmiennej do php za pomocą ajaxa niby wysyłać wysyła się ta zmienna ale php nie chce jej odczytać, nie wiem o co chodzi. Wie ktoś może o co może chodzić??

Kod js:

var titles = "dane w zmiennej";
$('.options-button div').click((event) => {

    $(document).attr('title', titles); //ustawianie tytułu strony
    localStorage.setItem('title', titles);  //zapisywanie zmiennej w pamięci aby przekazać do innego pliku js

//wysyłanie zmiennej do pliku index.php
//niby jest wysyłany bo wyskakuje alert działa ale php nie odbiera tej zmiennej
    $.ajax({
        type: 'post',
        url:  'php/przeglad_plikow/index.php',
        data:  { json_one: titles }
    }).done(function(){
        alert("dziala");  //ten tutaj alert
    }).fail(function(){
        alert("Wystąpił błąd");
    });

    location.href = "php/przeglad_plikow"  //uruchamianie strony index.php
})

Kod php:

$json_one = $_POST["json_one"]; //odbiór zmiennej

Error:

Notice: Undefined index: json_one in C:\Xampp\htdocs\Strona_szkoła\php\przeglad_plikow\index.php on line 33

 

komentarz 27 września 2020 przez ScriptyChris Mędrzec (190,190 p.)
location.href = "php/przeglad_plikow"

Rozważ, czy nie lepiej jest zrobić przekierowanie przez zwrotny nagłówek location. Poza tym, to przekierowanie wykonujesz nie czekając na zwrotkę ajaxa (który wykonuje się asynchronicznie), więc jeśli już w ten sposób, to umieść to w callbacku do metody done.

2 odpowiedzi

+1 głos
odpowiedź 27 września 2020 przez ScriptyChris Mędrzec (190,190 p.)

Według dokumentacji zmiennej $_POST, są tam dostępne dane przesłane metodą POST, ale wtedy gdy w nagłówku Content-Type jest application/x-www-form-urlencoded lub multipart/form-data. Upewnij się więc (w devtoolsach przeglądarki), czy jQuery pod spodem nie zserializowało danych do postaci JSON. Jeśli tak, to dane po stronie PHP odczytasz funkcją file_get_contents (z parametrem "php://input") i będziesz je musiał sparsować funkcją json_decode.

komentarz 27 września 2020 przez Marak123 Stary wyjadacz (11,190 p.)

To jest devtools z strony która odbiera dane 

a to jest devtools strony która wysyła dane za pomocą fetch

a odnośnie usunięcia tej linijki to jak ja mam to zrobić jeżeli muszę mieć dostęp do strony która odbiera dane a jeżeli usunę tą linijkę to mi nie przejdzie na tą stronę

edit:: 

z dodaną linijką przechodzenia też jest wysyłana zmienna

komentarz 27 września 2020 przez ScriptyChris Mędrzec (190,190 p.)

Teraz wysyłasz niejawnie zserializowany metodą toString obiekt w formie "[object Object]" a nie JSON'a reprezentującego ten obiekt. Brakuje użycia JSON.stringify (jak wspomniał @Artek) na zmiennej, którą przypisujesz do propertisa body w parametrach do fetch. Chociaż mimo to, PHP powinien to odczytać przynajmniej jako string "[object Object]".

a odnośnie usunięcia tej linijki to jak ja mam to zrobić jeżeli muszę mieć dostęp do strony która odbiera dane a jeżeli usunę tą linijkę to mi nie przejdzie na tą stronę

Ja bym się tym zajął w następnej kolejności, bo aktualnie masz problem z odbiorem danych z Ajaxa w PHP. Więc warto sprawdzić, czy usunięcie przekierowania ze strony JS pomoże.

komentarz 27 września 2020 przez Marak123 Stary wyjadacz (11,190 p.)
usunąłem te przekierowanie js ale dodałem przekierowanie w html jako zwykły link ale i tak nie działa odbiór danych w tym php
komentarz 27 września 2020 przez ScriptyChris Mędrzec (190,190 p.)
Hmm, to nie wiem w czym problem. Testowo postawiłbym jeszcze serwer w Node i sprawdził, czy tam mogę odebrać dane z Ajaxa - jeśli tak, to winą jest coś po stronie PHP/serwera na którym on działa.
komentarz 27 września 2020 przez Marak123 Stary wyjadacz (11,190 p.)
sprawdzę

ale mimo to dzięki za pomoc
0 głosów
odpowiedź 27 września 2020 przez VBService Ekspert (253,420 p.)

Według komunikatu błędu, nie istnieje w POST zmienna json_one

Notice: Undefined index: json_one in ...

Sprawdź, może przez var_dump($_REQUEST['json_one']);

Spróbuj dla testów, wysłać jakąś "prostą" zawartość zmiennej np.:

    $(document).attr('title', titles); //ustawianie tytułu strony
    localStorage.setItem('title', titles);  //zapisywanie zmiennej w pamięci aby przekazać do innego pliku js 

    const one = 1;
//wysyłanie zmiennej do pliku index.php
//niby jest wysyłany bo wyskakuje alert działa ale php nie odbiera tej zmiennej
    $.ajax({
        type: 'post',
        url:  'php/przeglad_plikow/index.php',
        data:  { one: one }
    }).done(function(){
        alert("dziala");  //ten tutaj alert
    }).fail(function(){
        alert("Wystąpił błąd");
    });
$_REQUEST['one'];

Spróbuj dodać dataType: "html"

    $.ajax({
        type: 'post',
        url:  'php/przeglad_plikow/index.php',
        data:  { one: one },
        dataType: "html"
    }).done(function(){

Może titles zawiera znaki, które trzeba przepuścić przez encodeURIComponent();

var titles = encodeURIComponent("dane w zmiennej");
$('.options-button div').click((event) => {
 
    $(document).attr('title', titles); //ustawianie tytułu strony
    localStorage.setItem('title', titles);  //zapisywanie zmiennej w pamięci aby przekazać do innego pliku js
 
//wysyłanie zmiennej do pliku index.php
//niby jest wysyłany bo wyskakuje alert działa ale php nie odbiera tej zmiennej
    $.ajax({
        type: 'post',
        url:  'php/przeglad_plikow/index.php',
        data:  { json_one: titles }
    }).done(function(){

    ...
})
komentarz 28 września 2020 przez Marak123 Stary wyjadacz (11,190 p.)
Niestety nic nie działa nadal nie odbiera danych i wyskakuje error

Podobne pytania

0 głosów
1 odpowiedź 100 wizyt
pytanie zadane 11 listopada 2020 w JavaScript przez Jacuchna0 Użytkownik (640 p.)
+1 głos
1 odpowiedź 284 wizyt
pytanie zadane 14 sierpnia 2019 w JavaScript przez Bartłomiej Bolesta Obywatel (1,630 p.)
–1 głos
3 odpowiedzi 235 wizyt
pytanie zadane 23 grudnia 2018 w JavaScript przez Q7V Gaduła (4,250 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...