Added support for parsererror errors from Ajax requests (bug #1145).
[jquery.git] / src / ajax / ajax.js
index fa04718..7d83a0e 100644 (file)
@@ -622,7 +622,7 @@ jQuery.extend({
                // Wait for a response to come back
                var onreadystatechange = function(isTimeout){
                        // The transfer is complete and the data is available, or the request timed out
-                       if ( xml && (xml.readyState == 4 || isTimeout == "timeout") ) {
+                       if ( !requestDone && xml && (xml.readyState == 4 || isTimeout == "timeout") ) {
                                requestDone = true;
                                
                                // clear poll interval
@@ -662,7 +662,7 @@ jQuery.extend({
                                        } else
                                                jQuery.handleError(s, xml, status);
                                } catch(e) {
-                                       status = "error";
+                                       status = "parsererror";
                                        jQuery.handleError(s, xml, status, e);
                                }
 
@@ -757,8 +757,11 @@ jQuery.extend({
         */
        httpData: function( r, type ) {
                var ct = r.getResponseHeader("content-type");
-               var data = !type && ct && ct.indexOf("xml") >= 0;
-               data = type == "xml" || data ? r.responseXML : r.responseText;
+               var xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0;
+               data = xml ? r.responseXML : r.responseText;
+
+               if ( xml && data.documentElement.tagName == "parsererror" )
+                       throw "parsererror";
 
                // If the type is "script", eval it in global context
                if ( type == "script" )