Question MSIE Renvoie le code d'état 1223 pour la demande Ajax


Je soumets un formulaire en utilisant une requête ajax (méthode POST), et en vérifiant le code d'état HTTP sur la réponse pour voir si elle a réussi ou non.

Cela fonctionne bien sur Firefox, mais bien sûr pas sur MSIE-8. La soumission fonctionne vraiment bien, je peux vérifier mon serveur et confirmer que la soumission a fonctionné et le serveur a répondu avec un code d'état de 204. Encore, firefox me donne correctement le code d'état de 204 de l'objet de demande, mais IE donne un code d'état de 1223.

Des idées sur la manière d'obtenir un code de statut précis dans MSIE? Le code qui soumet le formulaire et vérifie la réponse est ci-dessous.

    var req = new XMLHttpRequest();
    req.open("POST", "p.php?i=" + self.__isid, true);
    //Send the proper header information along with the request
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    req.setRequestHeader("Content-length", formdata.length);
    req.setRequestHeader("Connection", "close");

    req.onreadystatechange = function()
    {
        if(req.readyState == 4)
        {
            if(req.status == 204 || req.status == 200)
            {
                //Success. Update the feed.
                self.__postFeed.update();
                self.__form.reset();
            }
            else
            {
                //TODO: Better error handling.
                alert("Error submitting post:\n" + req.responseText);
            }
        }
    }
    req.send(formdata);

14
2018-04-06 14:25


origine


Réponses:


Implémentation XMLHTTPRequest en HTTP MSXML (at   moins dans IE 8.0 sur Windows XP SP3 +) ne gère pas les réponses HTTP   avec le code de statut 204 (No Content) correctement; la propriété `status 'a   la valeur 1223.

Ceci est un bogue connu et la plupart des frameworks basés sur javascript gèrent cette situation et normalisent 1223 à 204 dans IE

Donc, la solution à votre problème serait comme ça

// Normalize IE's response to HTTP 204 when Win error 1223.
status : (conn.status == 1223) ? 204 : conn.status,
// Normalize IE's statusText to "No Content" instead of "Unknown".
statusText : (conn.status == 1223) ? "No Content" : conn.statusText

Référence:

dojo - http://trac.dojotoolkit.org/ticket/2418

prototype - https://prototype.lighthouseapp.com/projects/8886/tickets/129-ie-mangles-http-response-status-code-204-to-1223

YUI - http://developer.yahoo.com/yui/docs/connection.js.html (handleTransactionResponse)

JQuery - http://bugs.jquery.com/ticket/1450

ExtJS - http://www.sencha.com/forum/showthread.php?85908-FIXED-732-Ext-doesn-t-normalize-IE-s-crazy-HTTP-status-code-1223


33
2018-04-06 17:53