jQuery - Ajax-Anfrage gibt 200 zurück OK, aber Fehlerereignis wird ausgelöst?

jQuery - Ajax-Anforderung gibt 200 OK zurück, aber Fehlerereignis wird ausgelöst?

Überprüfen Sie das Senden eines jQuery Ajax-Formulars.

    $(document).ready(function () {

        $("#hostingForm").submit(function (e) {

            e.preventDefault(e);

            var data = {}
            data["id"] = $("#id").val();
            data["domain"] = $("#domain").val();
            data["name"] = $("#name").val();
            //...

            $.ajax({
                type: "POST",
                contentType: "application/json",
                url: "{{home}}/hosting/update",
                data: JSON.stringify(data),
                dataType: 'json',
                timeout: 600000,
                success: function (data) {

                    console.log("SUCCESS: ", data);
                },
                error: function (e) {

                    console.log("ERROR: ", e);
                }
            });

        });
    });

Überprüfen Sie die Serverseite (Spring MVC), um die Ajax-Anforderung zu erhalten.

@RestController
@RequestMapping("/hosting")
public class AdminHostingController {

    @Autowired
    HostingBo hostingBo;

    @RequestMapping(value = "/update", method = RequestMethod.POST)
    public String updateHosting(@RequestBody HostingForm hostingForm) {

        if(hostingForm!=null){
            hostingBo.update(hostingForm, UpdatedBy.WEB);
        }

        return "success";

    }

Der obige Spring MVC-Code funktioniert einwandfrei, hat die Datenbank aktualisiert und gibt eine Erfolgszeichenfolge zurück.

1. Problem

Sowohl die Clientseite (jQuery Ajax Form Submit) als auch die Serverseite (Spring MVC) funktionieren einwandfrei, aber das Ajax-Fehlerereignis wird ausgelöst?

Siehe die folgende Ausgabe in der Browserkonsole:

ERROR:  Object {readyState: 4, responseText: "success", status: 200, statusText: "OK"}

200 OK, aber Fehlerereignis wird ausgelöst?

2. Lösung

Wenn in jQuery.ajax() die EinstellungdataType: 'json' angegeben ist, muss der Server einen gültigen JSON-formatierten String zurückgeben, andernfalls wird ein Fehler ausgegeben.

Note
Überprüfen Sie die folgende Aussage des offiziellenjQuery Ajax documentation – dataType settings:

„… Die JSON-Daten werden streng analysiert. Jeder fehlerhafte JSON wird zurückgewiesen und ein Analysefehler wird ausgelöst… “

To fix this, aktualisieren Sie die Serverseite, um eine JSON-formatierte Zeichenfolge zurückzugeben:

@RestController
@RequestMapping("/hosting")
public class AdminHostingController {

    @Autowired
    HostingBo hostingBo;

    @RequestMapping(value = "/update", method = RequestMethod.POST)
    public String updateHosting(@RequestBody HostingForm hostingForm) {

        if(hostingForm!=null){
            hostingBo.update(hostingForm, UpdatedBy.WEB);
        }

        //NEED JSON format
        return "{\"msg\":\"success\"}";

        //return "success";

    }

Versuchen Sie es erneut, überprüfen Sie die Browserkonsole erneut. Das Ereignis "Erfolg" wird ausgelöst.

SUCCESS:  Object {msg: "success"}