Wysłanie tablicy do servera

0

Witam.
Mam problem i już mnie nerwy biorą, więc chciał bym tu spytać o rozwiązanie. Mam w Javascipcie tablicę tekstów, chciał bym ją wysłać do PHP. I NIBY Javascript wysyła prawidłowo, ale PHP tego nie odczytuje. Próbuję dwóch sposobów i żaden nie działa. Jeden z użyciem XHR (tablica nazywa się "array" a plik do którego chcę wysłać nazywa się saveResult.php):

 JSONArray = JSON.stringify(array);
 var xhr = new XMLHttpRequest();
 xhr.open("POST", "saveResult.php", false);

 xhr.onload = function(){
      if (xhr.readyState == 4 && xhr.status == 200){
      console.log("Poszło OK");
      }
}
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("myArray = " + JSONArray);

Niestety nie mam pojęcia, co tu wpisać jako setRequestHeader, ale co bym nie wpisał (lub całkiem usunął) i tak efekt jest ten sam. Javascript wyświetla mi że jest OK (czyli kod 4 i status 200), ale odbioru po stronie php nie ma. Natomiast przyznaję, że nie mam pojęcia, co tu podać jako klucz dla $_POST.
Drugi sposób, jakiego próbuję to jest Ajax:

   $.ajax({
        url: "saveResult.php",
        method: "post",
        data: JSON.stringify(array),
        beforeSend: function(){
            console.log("Przed wysłaniem");
        },
        error: function(){
            console.log("Błąd");
        },
        succes: function(res){
            console.log("Poszło res: " + res);
    
        } 

    })

Tutaj z kolei nie odpala się funkcja wyświetlana po sukciesie, czyli rozumiem, że się w ogóle nie wysyła.

Po stronie PHP wygląda to tak (żadnej filozofii):

  <?php
  
  $tablica_scrolli = json_decode($_POST['myArray']);

 print_r($_POST);
 echo '<br><br>';
 var_dump($_POST); 
  ?>

Przy próbie uruchomienia od razu wyskakuje błąd "Notice: Undefined index: myArray in"; A print_r i var_dump pokazują, że tablica $_POST jest pusta (czyli dane nie dotarły).
Obejrzałem ze sto filmów, przeczytałem ze sto tutoriali i odpowiedzi na róznych forach. WSZĘDZIE odpowiedzi pomijają wysyłanie tablicy z podaniem klucza dla POST.
Czy ktoś może mi powiedzieć, jak to rozwiązać?
Aha. Metoda wysyłająca nie jest wywoływana w żadnym formularzu, tylko bezpośrednio z :

    <button class = "baton" onclick="exchange()">Zapisz</button>

Dodam, że nie jestem jakimś orłem w PHP i Javascripcie. Raczej uczę się ich teraz, bo taka wyskoczyła potrzeba. Bardziej dłubię w C# :)

1

Zauważ, że w Twoim kodzie JS nie występuje literał myArray (więc skąd miałby się wziąć po stronie PHP?) - spróbuj coś w stylu:

$.ajax({
    url: "saveResult.php",
    method: "post",
    data: {
        myArray: array,
    }, 
    /* ... */
});
0
Patryk27 napisał(a):

Zauważ, że w Twoim kodzie JS nie występuje literał myArray (więc skąd miałby się wziąć po stronie PHP?) - spróbuj coś w stylu:

$.ajax({
    url: "saveResult.php",
    method: "post",
    data: {
        myArray: array,
    }, 
    /* ... */
});

O. To jest cenna podpowiedź. Chociaż w pierwszej wersji on występuje:

xhr.send("myArray = " + JSONArray);

Ale sprawdzę Twoją podpowiedź. Dziękuję

0

Chociaż w pierwszej wersji on występuje:

Tak, zacząłem właśnie modyfikować moją odpowiedź, ale nie zdążyłem 😅

W przypadku pierwszego kodu problematyczne mogą być białe znaki dookoła = oraz brak url encoding zawartości JSONArray.

1
Patryk27 napisał(a):

Chociaż w pierwszej wersji on występuje:

Tak, zacząłem właśnie modyfikować moją odpowiedź, ale nie zdążyłem 😅

W przypadku pierwszego kodu problematyczne mogą być białe znaki dookoła = oraz brak url encoding zawartości JSONArray.

W końcu udało mi się to zwalczyć. Rozwiązanie okazało się (jak zwykle) proste :) Tablicę zmieniłem w jeden ciąg (miałem to zrobić w PHP, ale w sumie żadna różnica, czy w PHP, czy wcześniej w Javascripcie), utworzyłem nowy obiekt typu FormData, dodałem do niego index i mój ciąg i ten obiekt wysłałem. I zaczęło działać

1 użytkowników online, w tym zalogowanych: 0, gości: 1