diff --git a/assets/js/page_image_detail.js b/assets/js/page_image_detail.js
index 139897af298c1b2828907a9e24d224df512b6a3e..42d8b07e959eea4eaac9940334fe220e446566e1 100644
--- a/assets/js/page_image_detail.js
+++ b/assets/js/page_image_detail.js
@@ -22,6 +22,7 @@ let lastTimeOut = null;
 
 const doSave = () => {
     const data = new FormData(document.forms.namedItem("upload"));
+    data.append("from_js", "true");
     save.value = "Saving…";
     postData(location.href, data).then((json) => {
         save.value = "Saved";
diff --git a/page_image_detail.go b/page_image_detail.go
index d619c80e351a3b4fc262ae19bfab3d0295e1629c..57102c2415bb985ebd725bb08240a0ed777af522 100644
--- a/page_image_detail.go
+++ b/page_image_detail.go
@@ -55,7 +55,11 @@ func pageImageDetail(ctx PageContext) http.Handler {
 				if err != nil {
 					panic(err)
 				}
-				http.Redirect(w, r, r.URL.Path, http.StatusFound)
+				if r.PostFormValue("fromjs") == "true" {
+					returnJson(w, true)
+				} else {
+					http.Redirect(w, r, r.URL.Path, http.StatusFound)
+				}
 				return
 			case "delete":
 				_, err = ctx.Database.Exec("DELETE FROM images WHERE id = $1 AND owner = $2", info.Id, user.Id)