2016-10-29 2 views
2

Unten ist mein Code (Client) Formulardaten im JSON-Format über JQUERY Ajax-AufrufWie senden Sie Formulardaten als einzelnes JSON-Objekt?

$(document).ready(function(){ 
    var contextroot = "/services/" 
    $("#customerForm").submit(function(e){ 
     e.preventDefault(); 
     var form = $(this); 
     var action = form.attr("action"); 
     var data = form.serializeArray(); 

     $.ajax({ 
        url: contextroot+action, 
        dataType: 'json', 
        type: 'POST', 
        contentType: 'application/json', 
        data: JSON.stringify(data), 
        success: function(data){ 
         console.log("DATA POSTED SUCCESSFULLY"+data); 
        }, 
        error: function(jqXhr, textStatus, errorThrown){ 
         console.log(errorThrown); 
        } 
     }); 
}); 
}); 

Im Folgenden wird die Feder-Controller (Service) senden JSON-Daten

@RequestMapping(value="/customer/create", method = RequestMethod.POST) 
    public CustomerDTO create(@RequestBody CustomerDTO customerDTO) { 
     return customerService.create(customerDTO); 
    } 

Auf Absenden des Formulars zu akzeptieren , Bekomme ich den folgenden Fehler
HTTP400: SCHLECHTE ANFRAGE - Die Anfrage konnte nicht vom Server wegen ungültiger Syntax verarbeitet werden.

Ich denke, dieser Fehler ist, da die Formulardaten als Array von JSON serialisiert werden Objekte anstelle von nur JSON Objekt in Anforderung Körpern wie unten

[{ „name“ gezeigt: „vorName“, den Wert " ":" John "}, {" Name ":" Nachname "," Wert ":" Miller "}, {" Name ":" E-Mail "," Wert ":" [email protected] "}, {" Name ":" mobiler“, "Wert": "99868377"}]

jedoch Dienst akzeptiert nur die folgenden JSON-Daten
{ "firstname": "John", "nachName": "Miller", "E-Mail": "[email protected]", "mobilen": "99868377" }

Wie Formulardaten in ein einziges JSON-Objekt konvertieren anstelle eines Arrays von JSON-Objekten.

+0

Sie können eine 'Liste ' in Ihrer Controller-Methode akzeptieren. Oder Sie können die Funktion '$ .serialize' anstelle von' $ .serializeArray() 'verwenden. http://api.jquery.com/serialize/ – arnabkaycee

+0

Sie können eine 'List ' in Ihrer Controller-Methode akzeptieren. Oder Sie können Daten [0] senden, wenn Sie sicher sind, dass Sie nur ein Objekt in Ihrem JSON-Array haben. – arnabkaycee

+0

$ .serialize-Funktion wird keine Formulardaten in JSON – Karthik

Antwort

2

Ich habe endlich eine Lösung gefunden. Ich habe eine Dienstprogramm Methode geschrieben, die JSON-Objekt erzeugt

$(document).ready(function(){ 
    var contextroot = "/services/" 
    $("#customerForm").submit(function(e){ 
     e.preventDefault(); 
     var form = $(this); 
     var action = form.attr("action"); 
     var data = form.serializeArray(); 

     $.ajax({ 
        url: contextroot+action, 
        dataType: 'json', 
        type: 'POST', 
        contentType: 'application/json', 
        data: JSON.stringify(getFormData(data)), 
        success: function(data){ 
         console.log("DATA POSTED SUCCESSFULLY"+data); 
        }, 
        error: function(jqXhr, textStatus, errorThrown){ 
         console.log(errorThrown); 
        } 
     }); 
}); 
}); 

//utility function 
function getFormData(data) { 
    var unindexed_array = data; 
    var indexed_array = {}; 

    $.map(unindexed_array, function(n, i) { 
    indexed_array[n['name']] = n['value']; 
    }); 

    return indexed_array; 
} 
+0

Danke. Es funktionierte. –

Verwandte Themen