diff --git a/IPython/html/static/base/js/utils.js b/IPython/html/static/base/js/utils.js
index 5923256..bb903ad 100644
--- a/IPython/html/static/base/js/utils.js
+++ b/IPython/html/static/base/js/utils.js
@@ -514,15 +514,20 @@ define([
}
};
+ var ajax_error_msg = function (jqXHR) {
+ // Return a JSON error message if there is one,
+ // otherwise the basic HTTP status text.
+ if (jqXHR.responseJSON && jqXHR.responseJSON.message) {
+ return jqXHR.responseJSON.message;
+ } else {
+ return jqXHR.statusText;
+ }
+ }
var log_ajax_error = function (jqXHR, status, error) {
// log ajax failures with informative messages
var msg = "API request failed (" + jqXHR.status + "): ";
console.log(jqXHR);
- if (jqXHR.responseJSON && jqXHR.responseJSON.message) {
- msg += jqXHR.responseJSON.message;
- } else {
- msg += jqXHR.statusText;
- }
+ msg += ajax_error_msg(jqXHR);
console.log(msg);
};
@@ -547,6 +552,7 @@ define([
platform: platform,
is_or_has : is_or_has,
is_focused : is_focused,
+ ajax_error_msg : ajax_error_msg,
log_ajax_error : log_ajax_error,
};
diff --git a/IPython/html/static/notebook/js/notebook.js b/IPython/html/static/notebook/js/notebook.js
index b4bf734..e22fd51 100644
--- a/IPython/html/static/notebook/js/notebook.js
+++ b/IPython/html/static/notebook/js/notebook.js
@@ -2286,17 +2286,14 @@ define([
*/
Notebook.prototype.load_notebook_error = function (xhr, status, error) {
this.events.trigger('notebook_load_failed.Notebook', [xhr, status, error]);
+ utils.log_ajax_error(xhr, status, error);
var msg;
if (xhr.status === 400) {
- if (xhr.responseJSON && xhr.responseJSON.message) {
- msg = escape(xhr.responseJSON.message);
- } else {
- msg = escape(error);
- }
+ msg = escape(utils.ajax_error_msg(xhr));
} else if (xhr.status === 500) {
msg = "An unknown error occurred while loading this notebook. " +
"This version can load notebook formats " +
- "v" + this.nbformat + " or earlier.";
+ "v" + this.nbformat + " or earlier. See the server log for details.";
}
dialog.modal({
notebook: this,