103 Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von

Hi,

beim Übertragen von PHP-Daten mittels der fetch-API erhalte ich folgenden Fehler:
SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data

Kann mir jemand sagen, wo genau mein Denkfehler liegt? Vielen Dank.

MG

NinjaKlaus

PS.: post.php und welcome.php folgen im 2. post.

9 Antworten

0 Punkte
Beantwortet von

post.php:

...     

  if (isset($_POST['createEntry'])) {

            if (!empty(isset($_POST['manufacturer'])) && !empty(isset($_POST['track'])) && !empty(isset($_POST['epoch'])) &&

                !empty(isset($_POST['evu'])) && !empty(isset($_POST['companyNumber']))  && !empty(isset($_POST['articleNumber']))) {

                $result['manufacturer'] = $manufacturer = mysqli_real_escape_string($connect, $_POST['manufacturer']);

                $result['track'] = $track = mysqli_real_escape_string($connect, $_POST['track']);

                $result['epoch'] = $epoch = mysqli_real_escape_string($connect, $_POST['epoch']);

                $result['evu'] = $evu = mysqli_real_escape_string($connect, $_POST['evu']);

                $result['companyNumber'] = $companyNumber = mysqli_real_escape_string($connect, $_POST['companyNumber']);

                $result['articleNumber'] = $articleNumber = mysqli_real_escape_string($connect, $_POST['articleNumber']);

               $result['success'] = true; // Mark success true

...

?>

0 Punkte
Beantwortet von

helper.js:
 

async function sendData(data, url) {

    try {

        const request = await fetch(url, {

            method: "post",

            body: data

        });

        const result = await request.json();

        console.log(result);

    } catch(error) {

        console.log(data);

        //console.error(error)

    }

}

const formEdit = document.getElementById("formEdit");

formEdit.addEventListener("submit", function(e) {

    // Prevent that the PHP is directly called

    e.preventDefault();

    var data = new FormData(document.forms.formEdit);

    sendData(data, "post.php");

});

0 Punkte
Beantwortet von

welcome.html:

...

                <div id="create_entry">

                    <fieldset>

                        <legend>Eintrag anlegen</legend>

                        <form id="formEdit">

                            ...

                                    <label>Hersteller:</label>

                                    <label>Spurweite:</label>

                                    <label>Epoche:</label>

                                    <label>EVU:</label>

                                    <label>Betriebsnummer:</label>

                                    <label>Artikelnummer:</label

                                    <input type="text" name="manufacturer" required>

                                    <input type="text" name="track" required>

                                    <input type="text" name="epoch" required>

                                    <input type="text" name="evu" required>

                                    <input type="text" name="companyNumber" required>

                                    <input type="text" name="articleNumber" required>

                              <br><br>

                                <input type="submit" value="Speichern" id="save_create" name="save_create">

...

<script src="helper/js/helper.js"></script>

...

Das war's. Wer mehr benötigt, schreibt bitte.

0 Punkte
Beantwortet von computerschrat Profi (32.7k Punkte)
Hallo NinjaKlaus,

vermutlich ist das Objekt leer. Mach doch vorher mal einen print_r($hier_das_fraglliche_Objekt);

Gruß computerschrat
0 Punkte
Beantwortet von computerschrat Profi (32.7k Punkte)
Als ich meine erste Antwort schrieb,  waren die drei Quelltexte noch nicht sichtbar.  Ab welcher Stelle wirft php denn den Fehler?

Gruß computerschrat
0 Punkte
Beantwortet von

Hi computerschrat,

danke erstmal für die Antwort.

Im Quellcode fehlt auch was, da ich ihn sehr kürzen musste. Hier der Rest der post.php:

...               

// Start transaction

                mysqli_begin_transaction($connect);

                try {

                    $queryManufacturer = mysqli_query($connect, "INSERT INTO manufacturer (m_name) VALUES ('$manufacturer')");

                    $queryTrack = mysqli_query($connect, "INSERT INTO track (t_name) VALUES ('$track')");

                    $queryEpoch = mysqli_query($connect, "INSERT INTO epoch (e_name) VALUES ('$epoch')");

                    $queryEVU = mysqli_query($connect, "INSERT INTO evu (e_name) VALUES ('$evu')");

                    $queryCompany = mysqli_query($connect, "INSERT INTO company_number (c_num) VALUES ('$companyNumber')");

                    $queryArticle = mysqli_query($connect, "INSERT INTO article_number (a_num, c_ID) VALUES ('$articleNumber', (SELECT ID FROM company_number ORDER BY ID DESC LIMIT 1))");

                    mysqli_commit($connect);

                    print("<span class='success' name='success'>Datensatz erfolgreich angelegt</span>\n");

                } catch(Exception $e) {

                    mysqli_rollback($connect);

                    print("<span class='error2' name='error2'>Datensatz konnte nicht angelegt werden:\n\n$e</span>\n");

                }

                echo json_encode($result);

            }

        }

        mysqli_close($connect);

...

Die genaue Fehlerstelle kann ich nicht erfassen. Wenn ich den error ausgebe, kommt nur:
SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data

Hoffe, der Rest des Quelltexts hilft ein wenig weiter.

0 Punkte
Beantwortet von computerschrat Profi (32.7k Punkte)
Hallo NinjaKlaus,

ich kann die Struktur des Scripts nicht erkennen. Ich vermute mal, dass der erste Teil, in dem eine Variable $result erzeugt wird eine eigene Funktion ist. Dann ist $result nur lokal gültig. Folglich ist ganz unten bei json_encode($result); das  hier angezogene $result eine andere Variable als oben und damit leer.

Gruß computerschrat
0 Punkte
Beantwortet von
Hi,

mittlerweile habe ich eine Lösung gefunden. Die Daten werden jetzt übertragen. Natürlich muss ich das jetzt alles noch mittels regulärer Ausdrücke anpassen. Aber das ist Makulatur.

Leider ist es nicht möglich, den vollständigen Quellcode zu posten. Aber es funktioniert, wie's soll.

Vielen Dank für deine Hilfe.

MFG NinjaKlaus.
+1 Punkt
Beantwortet von computerschrat Profi (32.7k Punkte)
Hallo Klaus,
Wenn du eine Lösung gefunden hast,  dann poste die hier bitte. Auch wenn du nicht den kompletten Quelltext hier hochladen kannst,  so doch wenigstens in Worten sagen,  wie die Lösung aussieht. Es könnte noch jemand anderes das gleiche Problem haben und dann hier die Lösung finden.
Gruß computerschrat
...