diff --git a/IPython/html/static/base/js/utils.js b/IPython/html/static/base/js/utils.js
index 5923256c7..bb903ad0a 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 02a4439ee..e22fd515b 100644
--- a/IPython/html/static/notebook/js/notebook.js
+++ b/IPython/html/static/notebook/js/notebook.js
@@ -2286,13 +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) {
- msg = 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,
@@ -2567,10 +2568,10 @@ define([
* @method delete_checkpoint_error
* @param {jqXHR} xhr jQuery Ajax object
* @param {String} status Description of response status
- * @param {String} error_msg HTTP error message
+ * @param {String} error HTTP error message
*/
- Notebook.prototype.delete_checkpoint_error = function (xhr, status, error_msg) {
- this.events.trigger('checkpoint_delete_failed.Notebook');
+ Notebook.prototype.delete_checkpoint_error = function (xhr, status, error) {
+ this.events.trigger('checkpoint_delete_failed.Notebook', [xhr, status, error]);
};