From d515068ee807efef29b6c8406171be4725d7154f Mon Sep 17 00:00:00 2001
From: jaubourg <j@ubourg.net>
Date: Sun, 9 Jan 2011 04:53:29 +0100
Subject: [PATCH] Fixes #7868. ResponseText is now properly propagated for
 error callbacks.

---
 src/ajax.js                 |    5 +++++
 src/ajax/xhr.js             |   16 +++++++---------
 test/data/errorWithText.php |    5 +++++
 test/unit/ajax.js           |   17 +++++++++++++++++
 4 files changed, 34 insertions(+), 9 deletions(-)
 create mode 100644 test/data/errorWithText.php

diff --git a/src/ajax.js b/src/ajax.js
index a814d80..744476f 100644
--- a/src/ajax.js
+++ b/src/ajax.js
@@ -464,6 +464,11 @@ jQuery.extend({
 			} else { // if not success, mark it as an error
 
 					error = error || statusText;
+
+					// Set responseText if needed
+					if ( response ) {
+						jXHR.responseText = response;
+					}
 			}
 
 			// Set data for the fake xhr object
diff --git a/src/ajax/xhr.js b/src/ajax/xhr.js
index 032668f..a2ec4a4 100644
--- a/src/ajax/xhr.js
+++ b/src/ajax/xhr.js
@@ -137,15 +137,13 @@ jQuery.ajax.transport( function( s , determineDataType ) {
 											status
 									);
 
-							// Guess response if needed & update datatype accordingly
-							if ( status >= 200 && status < 300 ) {
-								response =
-									determineDataType(
-										s,
-										xhr.getResponseHeader("content-type"),
-										xhr.responseText,
-										xhr.responseXML );
-							}
+							// Guess response & update dataType accordingly
+							response =
+								determineDataType(
+									s,
+									xhr.getResponseHeader("content-type"),
+									xhr.responseText,
+									xhr.responseXML );
 						}
 
 						// Call complete
diff --git a/test/data/errorWithText.php b/test/data/errorWithText.php
new file mode 100644
index 0000000..abd8732
--- /dev/null
+++ b/test/data/errorWithText.php
@@ -0,0 +1,5 @@
+<?php
+
+header("HTTP/1.0 400 Bad Request");
+
+echo "plain text message";
\ No newline at end of file
diff --git a/test/unit/ajax.js b/test/unit/ajax.js
index d5f2bc0..adf589e 100644
--- a/test/unit/ajax.js
+++ b/test/unit/ajax.js
@@ -240,6 +240,23 @@ test("jQuery.ajax() - error callbacks", function() {
 	});
 });
 
+test("jQuery.ajax() - responseText on error", function() {
+
+	expect( 1 );
+
+	stop();
+
+	jQuery.ajax({
+		url: url("data/errorWithText.php"),
+		error: function(xhr) {
+			strictEqual( xhr.responseText , "plain text message" , "Test jXHR.responseText is filled for HTTP errors" );
+		},
+		complete: function() {
+			start();
+		}
+	});
+});
+
 test(".ajax() - headers" , function() {
 
 	expect( 2 );
-- 
1.7.10.4