Gdy wysyłam żądanie POST z pliku JavaScript w pliku PHP w tej samej aplikacji, PHP-skrypt zawsze odczytuje go jako żądanie GET. Dlaczego?

0

Pytanie

Mam dynamiczna forma na jednej z moich stron internetowych. Forma zapisuje dane w pliku skryptu i aktualizuje je w miarę dodawania przez użytkownika dodatkowych danych z formularza. Jest to obiekt, który tworzę w JS:

const survey = {
   title: '',
   createdBy: '',
   description: '',
   openingMsg: '',
   thankyouMsg: '',
   questions: [],
}

Tablica pytań zawiera obiekty pytań. To taka klasa:

class Question {
   constructor(id) {
      this.id = id
   }
   questionText = ''
   type = ''
   choices = new Map()
}

Dodaję detektor zdarzeń do przycisku wysyłania w następujący sposób:

const saveSurveyBtn = document.getElementById('saveSurvey')
surveyForm.addEventListener('submit', saveSurvey)

a funkcja saveSurvey wygląda tak:

function saveSurvey(e) {
    e.preventDefault()

    fetch('../../actions/save-survey.php', {
        method: 'POST',
        body: JSON.stringify(survey),
        headers: {
            "Content-type": "application/json;charset=UTF-8"
        }
    })
}

Jak widać, staram się wysłać dane do lokalnego skrypt php z JS. Wszystko jest dobrze, dopóki nie dotrę do pliku skryptu php. Problem następujący; niezależnie od tego, że w moim wywołaniu próbki używam metoda: POST, zawsze wysyłane jako żądanie GET. Dlaczego? Jak mogę to naprawić?

fetch javascript php
2021-11-22 15:46:57
1

Najlepsza odpowiedź

0

Dobrze, nie mogę powiedzieć, dlaczego moje dane formy nie zostały opublikowane, i potwierdził, że zostały one wysłane jako żądania GET. Ale to jak rozwiązał ten problem.

Dodałem ukryte pole formularza i zmienił przycisk typu "wyślij" na typ "przycisk". Następnie chwyciłem ten przycisk przez JS i zainstalowałem na niej detektor kliknięć. Gdy użytkownik kliknie przycisk, najpierw wyznaczam swój serializowany obiekt ankiety JSON ukrytego pola. Następnie ręcznie mundur, a ona została wysłana pocztą w PHP-skrypt. Metoda formy zawsze był "post", ale na początku to wydawało się, że nie miało to znaczenia. Nie wiem dlaczego, ale to jest mój wkład w postaci:

<input name="survey" id="survey" type="hidden" value="">

następnie chwytam przycisk, który wygląda tak:

<button type="button" class="btn btn-success" id="saveSurvey">Save Survey</button>

należy pamiętać, że to nie typ "wyślij". Następnie dodaję do niego detektor zdarzeń kliknięcia i wywołuję tę funkcję po kliknięciu:

function saveSurvey(e) {
    document.getElementById('survey').value = JSON.stringify(survey)
    surveyForm.submit()
}

To zadziałało. Nie wiem, czy odpowiedziałem na swoje pytanie, więc, jeśli ktoś inny da najlepszą odpowiedź, naprawię ten post. Dziękuję wam wszystkim za pomoc.

2021-11-23 22:22:10

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................