Ich habe Code, der Formularfelder aufnimmt und sie in eine JSON-Zeichenkette konvertiert, die für die Weitergabe an eine REST-API geeignet ist (speziell die Marathon-REST-API). Das Problem ist, dass JSON.stringify alle Formularfeldwerte doppelt anführt, sogar diejenigen, die numerisch sind, was dazu führt, dass der Ajax-Aufruf fehlschlägt. Hier ist der String meinen Code produziert:Wie man numerische Felder in JSON.stringify erhält
{"id":"basic-1","cpus":"0","mem":"32","instances":"1","cmd":"while [ true ] ; do echo 'Hello Marathon' ; sleep 5 ; done"}
Die mem, CPUs und Instanzen Werte sollten nicht doppelt angegeben werden, weil sie numerisch sind.
data: JSON.stringify($('form').MytoJson());
MytoJson ist eine Funktion, die die Formularfelder serialisiert. Das funktioniert gut. Das Problem ist, dass JSON.stringify die Anführungszeichen um die Schlüssel und alle Werte, einschließlich der numerischen Werte, platziert, die den Ajax-Aufruf fehlschlagen lassen.
Die JSON.stringify-Funktion benötigt zwei Argumente. Das erste Argument ist eine Ersetzungsfunktion, die eine Funktion oder ein Array sein kann. Betrachten Sie diese replacer Funktion:
function replacer(key, value) {
if (typeof value === "string") {
return undefined;
}
return value;
}
JSON.stringify($('form').MytoJson(), replacer);
ich diese replacer Funktion nicht numerische Werte ändern möchten zitieren. Ich frage mich, ob ich die HTML5-Formularattribute verwende, um zwischen Zeichenfolgen- und numerischen Formularfeldern zu unterscheiden? Betrachten Sie dieses Formularfeld:
<input id="cpus" type="number" name="cpus" value="0.1" />
Wie kann ich die Tatsache nutzen, dass dieses Feld das Attribut Typ hat = „number“ in der replacer Funktion? Ich möchte die Replacer-Funktion ändern, um keine Werte zu zitieren, wenn das Formularfeld vom Typ Nummer ist.
Dies sollte nicht dazu führen, dass der Ajax-Aufruf fehlschlagen - ich schätze, Sie verwenden einen POST oder PUT - dies sollte immer noch die Daten an Ihren Service senden - was Sie tun müssen, ist in Ihrem Dienst, um diese dann zu konvertieren Stringwert zu numerisch, bevor er an Ihre Datenbank übergeben wird. Es ist eine Standardprozedur, Numerik zu stringulieren, bevor sie an einen erholsamen Dienst gesendet wird. – Sprose