SyntaxError: Unexpected token s in JSON at position 0?

2 Antworten

Verwende entweder die stringify-Methode auf das data-Objekt oder gestalte das data-Objekt als korrektes JSON:

var data = {
  "seller": $("#email").val(),
  "name": $("#item").val(),
  "html": $("#desc").val(),
  "minimum_price": $("#str").val(),
  "buyout_price": $("#buyout").val(),
  "created_on": Date.now(),
  "duration": $("#dur").val()
}

Die Namen der Properties werden in Anführungszeichen gesetzt.

Ob die konkreten Daten valid sind, kann ich im Moment nicht sagen, das solltest du noch prüfen. Ein JSON Validator kann dir dabei helfen (z.B. dieser).

Jelnik 
Fragesteller
 01.12.2019, 21:59

Danke fuer die Antwort! Leider funktioniert es immer noch nicht. mit deinem Code Habe die JSON Datei ueberprueft und sie ist eine gueltige Datei.

0
regex9  01.12.2019, 22:01
@Jelnik

Bekommst du denn noch die gleiche Fehlermeldung? Lasse dir zudem einmal data auf der Konsole ausgeben:

console.log(JSON.stringify(data));
0
Jelnik 
Fragesteller
 01.12.2019, 22:05
@regex9
{"seller":"hudhasdh@web.de","name":"uhsdjk","html":"ashudjasd asjdasd","minimum_price":"15","buyout_price":"111","created_on":1575234241713,"duration":"3 hrs"}

Erhalte noch immer diese selbe Fehlermeldung. Und die Ausgabe habe ich erhalten.

SyntaxError: Unexpected token s in JSON at position 0
0
Jelnik 
Fragesteller
 01.12.2019, 22:15
@Jelnik

Soll ich

data: JSON.stringify(data),

in der AJAX-Request so schreiben?

0
regex9  01.12.2019, 22:15
@Jelnik

Ja, das wollte ich gerade schreiben. Mache das mal so.

0
Jelnik 
Fragesteller
 01.12.2019, 22:18
@regex9

Leider funktioniert es so auch nicht

0
Jelnik 
Fragesteller
 01.12.2019, 22:34
@Jelnik

Es hat endlich funktioniert. Habe einen Teil von der JSON Datei undefined. Ich muss jetzt die genommenen Daten aber in einer index.html Datei reinpacken. Hast du eine Idee wie das funktionieren könnte?

0

Nimm mal den Parameter

dataType: "json",

aus deinem Ajax-Request heraus. Mir scheint dein serverseitiges Skript liefert auf die Anfrage hin gar kein JSON zurück - somit kann die Antwort (was auch immer es ist) nicht korrekt als JSON geparst werden.

Jelnik 
Fragesteller
 01.12.2019, 22:10

Danke fuer deine Antwort! Leider bekomme ich dieselbe Meldung

0
Dory1  01.12.2019, 22:11
@Jelnik

Schau mal in die Netzwerk-Konsole deines Browsers (F12 -> Netzwerktab) und guck dort nach was genau gesendet wird, und was daraufhin vom Server zurückkommt.

0
Dory1  01.12.2019, 22:15
@Jelnik

Und wo genau erhältst du diese Fehlermeldung? Auf der Browserkonsole? Ausgabe im Browser? Serverseitig?

0
Jelnik 
Fragesteller
 01.12.2019, 22:16
@Dory1
Request URL: http://localhost:9000/auction
Request Method: POST
Status Code: 400 Bad Request
Remote Address: [::1]:9000
Referrer Policy: no-referrer-when-downgrade


Das ist was auf dem Netzwerktab steht.

Und die Console gibt die Fehlermeldung zurück

0
Dory1  01.12.2019, 22:18
@Jelnik

Und wie sehen die Post-Daten zu der Anfrage im Netzwerktab aus? Im Normalfall stehen da noch mehr Details.

0
Jelnik 
Fragesteller
 01.12.2019, 22:21
@Dory1

Wo finde ich dies?

0
Dory1  01.12.2019, 22:28
@Jelnik

Kommt auf den Browser an. Bei Chrome kannst du den Request anklicken und hast dann mehrere Tabs wie Headers, Preview, Response etc. Unter Headers sollten auch die Post-Daten stehen.

0
Jelnik 
Fragesteller
 01.12.2019, 22:34
@Dory1

Es hat endlich funktioniert. Habe einen Teil von der JSON Datei undefined. Ich muss jetzt die genommenen Daten aber in einer index.html Datei reinpacken. Hast du eine Idee wie das funktionieren könnte?

0
regex9  01.12.2019, 22:44
@Jelnik

Moment, das verstehe ich nicht. Was meinst du mit JSON-Datei undefined? Und geht es nun darum, das Ergebnis des Requests (welches du in der success-Funktion entgegennimmst), irgendwohin weiterzuleiten?

1
Dory1  01.12.2019, 22:53
@Jelnik

Hier mangelt es wirklich an Infos. Was genau macht dein serverseitiges Skript mit den Eingabedaten? Was ist die Antwort des Servers und was möchtest du damit anstellen?

0
Jelnik 
Fragesteller
 01.12.2019, 22:56
@regex9

Ich sollte zu dem

var data = {
  "seller": $("#email").val(),
  "name": $("#item").val(),
  "html": $("#desc").val(),
  "minimum_price": $("#str").val(),
  "buyout_price": $("#buyout").val(),
  "created_on": Date.now(),
  "duration": $("#dur").val()
}

noch

"state" : "offered"

weil man das nicht aus der Form nimmt, sondern soll einfach hinzugefügt werden, wenn man die neuen Auktionen definiert/kreiiert

0
Jelnik 
Fragesteller
 01.12.2019, 22:59
@Dory1
<form action="index.html">
                <div class="form-group">
                    <label for="email">Seller</label>
                    <input type="email" class="form-control" id="email" placeholder="Your email">
                </div>
                <div class="form-group">
                    <label for="item">Item</label>
                    <input type="text" class="form-control" id="item" placeholder="Short Name">
                </div>
                <div class="form-group">
                    <label for="description">Description</label>
                    <textarea rows="5" class="form-control" id="desc"></textarea>
                </div>
                <div class="form-group">
                    <label for="starting_price">Starting Price</label>
                    <input type="number" class="form-control" id="str" placeholder="€">
                </div>
                <div class="form-group">
                    <label for="buyout_price">Buyout Price</label>
                    <input type="number" class="form-control" id="buyout" placeholder="€">
                </div>
                <div class="form-group">
                    <label for="duration">Duration</label>
                    <select class="form-control" id="dur">
                        <option>3 hrs</option>
                        <option>6 hrs</option>
                        <option>12 hrs</option>
                        <option>1 day</option>
                        <option>2 days</option>
                        <option>3 days</option>
                    </select>
                </div>
                <button type="submit" method="post" class="btn btn-primary" id="create" onclick="addItem()">Create
                    Auction</button>
            </form>

Ich habe eine Form, die ich so erstelle. Dann mach ich Inputs in der Form (in der index.html) und dann müssen diese Inputs entsprechend zu einer Tabelle hinzugefügt werden. Ich habe das ausgedacht, leider funktioniert es nicht

for (var i = 0; i < data.length; i++) {
                        $("#table").append('<tr><td>' + data[i].id + '</td><td>' +
                            data[i].name + '</td><td>' + data[i].duration + '  min by ' +
                            data[i].seller + '</td><td><button type="button" class="btn btn-primary"> Bid for ' +
                            data[i].minimum_price + '€</button><br><button type="button"class="btn btn-outline-dark"> Buy for ' +
                            data[i].buyout_price + '€</button></td></tr><tr><td></td><td colspan="3">' + data[i].html + '</td></tr>');
                    }
0
regex9  01.12.2019, 23:04
@Jelnik

Irgendwie bist du jetzt nicht auf meine Fragen eingegangen und so verstehe ich kaum noch, um was es geht.

Das neue Key-Value-Paar kannst du einfach in dem Objekt anhängen.

var data = {
  // ...
  "duration": $("#dur").val(),
  "state": "offered"
};

Wenn der Wert des neuen Properties von woanders kommt, musst du den mit jQuery vorher noch heranziehen. Er kann vielleicht durch einen extra AJAX-Request herangezogen oder in einem data-Attribut irgendwo auf der Seite von der Serveranwendung gerendert werden.

PHP-Pseudo-Beispiel:

<span id="state" data-state="<?= getState() ?>"></span>
<!-- some other markup ... -->
<script>
  let state = $("#state").attr("data-state");
  // your post request ...
</script>

Soweit sind das nun alles nur noch Mutmaßungen.

0
Dory1  01.12.2019, 23:06
@Jelnik

Du hast noch immer nicht beschrieben was dein serverseitiges Skript mit den Eingabedaten macht :) So kommen wir hier nicht weiter.

0
regex9  01.12.2019, 23:07
@Jelnik

Ah. Sieht auf den ersten Moment ja nun nicht so falsch aus. Gibt dir die Browserkonsole denn dazu Fehlermeldungen zurück? Wie lässt sich das nicht funktionieren genau beschreiben?

0