jQuery - La demande Ajax renvoie 200 OK mais l’événement d’erreur est déclenché?

jQuery - La requête Ajax renvoie 200 OK mais l'événement d'erreur est déclenché?

Passez en revue un formulaire jQuery Ajax soumettre.

    $(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);
                }
            });

        });
    });

Passez en revue le côté serveur (Spring MVC) pour recevoir la requête Ajax.

@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";

    }

Le code Spring MVC ci-dessus fonctionne correctement, a mis à jour la base de données et renvoie une chaîne de "réussite".

1. Problème

Le côté client (soumission de formulaire jQuery Ajax) et le côté serveur (Spring MVC) fonctionnent correctement, mais l'événement d'erreur Ajax est déclenché?

Consultez la sortie suivante dans la console du navigateur:

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

200 OK mais l'événement d'erreur est déclenché?

2. Solution

Dans jQuery.ajax(), si le paramètredataType: 'json' est spécifié, le serveur doit renvoyer une chaîne au format JSON valide, sinon une erreur est générée.

Note
Examinez la déclaration suivante desjQuery Ajax documentation – dataType settings officiels:

«… Les données JSON sont analysées de manière stricte; tout JSON mal formé est rejeté et une erreur d'analyse est générée… »

To fix this, mettez à jour le côté serveur pour renvoyer une chaîne au format JSON:

@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";

    }

Réessayez, examinez à nouveau la console du navigateur, l'événement «succès» est déclenché.

SUCCESS:  Object {msg: "success"}