jQuery-Posting JSON

192

Update: Ich möchte das var valuean den Server weitergeben

Hallo, gleich alt, gleich alt ... :)

Ich habe ein Formular namens <form id="testForm" action="javascript:test()"> und einen Codebereich mit dem Namen<code id="testArea"></code>

Ich verwende diesen Code, um die Daten im Codebereich zu stringifizieren und anzuzeigen:

var formData = form2object('testForm');
document.getElementById('testArea').innerHTML = JSON.stringify(formData, null, '\t');
var value = JSON.stringify(formData, null, '\t');

Ich möchte diese Daten an eine JSON-Datei senden. Ich habe an diesem Projekt gearbeitet: http://ridegrab.com/profile_old/ und wenn Sie drückenSubmit Query Taste drücken, wird der Kopf der Seite ausgefüllt.

Außerdem möchte ich dieses Skript verwenden, um Daten zu senden:

    function authenticate(userName, password) {
    $.ajax
    ({
        type: "POST",
        //the url where you want to sent the userName and password to
        url: 'username:password@link to the server/update',
        dataType: 'json',
        async: false,
        //json object to sent to the authentication url
        data: '{"userName": "' + userName + '", "password" : "' + password + '"}',
        success: function () {

        alert("Thanks!"); 
        }
    })
}

Auch hier möchte ich nur diese JSON-Daten an den Server senden können. Mein Server ist für update or POSTdie Daten am richtigen Ort eingerichtet.

Patriotische Kühe
quelle
Ich kann es nicht machen :) Ich weiß nicht , wie sie zusammen zu stellen , dass die Daten an den Server zu senden ... auch wenn ich ersetzen datamit data: value,... !! ??
Patrioticcow
Sind Sie sicher, dass es sich nicht um ein Verbindungsproblem handelt? Wenn Sie eine errorFunktion zuweisen , wird sie aufgerufen? Wenn ja, mit welchem ​​Fehler?
Wiseguy
1
Obwohl es über ein Jahr alt ist, beantworte ich @ Patrioticcows neueste Frage, wie das geht. Sie sehen die Option "Erfolg", die Sie an die Ajax-Methode gesendet haben? Machen Sie dasselbe mit "Fehler". Wie in "Fehler: MyErrorHandlingFunction" oder "Fehler: Funktion (Fehler) {[Fehlerbehandlungscode hier]}"
vbullinger

Antworten:

218

'data' sollte ein stringifiziertes JavaScript-Objekt sein:

data: JSON.stringify({ "userName": userName, "password" : password })

Um Ihre zu senden formData, geben Sie sie an stringify:

data: JSON.stringify(formData)

Einige Server erfordern auch den application/jsonInhaltstyp:

contentType: 'application/json'

Es gibt auch eine detailliertere Antwort auf eine ähnliche Frage hier: Jquery Ajax Posting json to webservice

Kyle Wild
quelle
@ Tasos Ich denke, das ist, was Sie suchen
Kyle Wild
Echo der Unrichtigkeit hier; Dies funktioniert in einfachen Szenarien in Ordnung, aber die URL-codierte Nachricht kann sehr problematisch sein, insbesondere bei Arrays von Dingen.
FMM
@FMM und Jonas N - Könnt ihr mir helfen, herauszufinden, wie ich meine Antwort auf Richtigkeit aktualisieren kann? Die Beispiele in den jQuery-Dokumenten (hier: api.jquery.com/jQuery.post ) lassen den Eindruck entstehen , dass Sie entweder ein JS-Objekt oder eine Zeichenfolge veröffentlichen können, was mich zu der Annahme veranlasste, dass jQuery die gesamte erforderliche Zeichenfolgenserialisierung übernehmen würde .
Kyle Wild
Patrioticcow sagte: "Was ist, wenn ich den JSON vom var-Wert senden möchte?" Wenn der Wert kein Array oder Objekt ist, ist dies kein gültiger JSON.
andsens
1
Überlegen Sie, was passiert, wenn Ihre Daten beispielsweise eine Liste von Dingen enthalten : { foo: [1,2,3], bar: 'baz' }. Dies wird foo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=3&bar=bazformularcodiert als (nicht entkommen, es ist foo[]=1&foo[]=2&foo[]=3&bar=baz). Wahrscheinlich nicht das, was Sie serverseitig wollen.
FMM
270

Sie posten JSON so

$.ajax(url, {
    data : JSON.stringify(myJSObject),
    contentType : 'application/json',
    type : 'POST',
    ...

Wenn Sie ein Objekt als settings.data übergeben, konvertiert jQuery es in Abfrageparameter und sendet es standardmäßig mit dem Datentyp application / x-www-form-urlencoded. Zeichensatz = UTF-8, wahrscheinlich nicht das, was Sie wollen

Teknopaul
quelle
@ TimLovell-Smith wird keinen Unterschied machen, da jQuery dataauf keinen Fall einen String verarbeitet
Phil
2

Wenn Sie diese Post-Anfrage an eine domänenübergreifende Anfrage senden, sollten Sie diesen Link überprüfen.

https://stackoverflow.com/a/1320708/969984

Ihr Server akzeptiert die Cross-Site-Post-Anfrage nicht. Daher muss die Serverkonfiguration geändert werden, um standortübergreifende Anforderungen zuzulassen.

nizam.sp
quelle