From 811437cbefdc6cf769d8f18bf45a602e2cb38744 Mon Sep 17 00:00:00 2001 From: trever pietsch Date: Wed, 25 Apr 2018 08:58:54 -0700 Subject: [PATCH] STRF-4803 - adding helper function to remove empty files for safari jquery ajax bug --- assets/js/theme/common/product-details.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/assets/js/theme/common/product-details.js b/assets/js/theme/common/product-details.js index dcc665c87f..c34d834f59 100644 --- a/assets/js/theme/common/product-details.js +++ b/assets/js/theme/common/product-details.js @@ -56,6 +56,25 @@ export default class ProductDetails { this.previewModal = modalFactory('#previewModal')[0]; } + /** + * https://stackoverflow.com/questions/49672992/ajax-request-fails-when-sending-formdata-including-empty-file-input-in-safari + * Safari browser with jquery 3.3.1 has an issue uploading empty file parameters. This function removes any empty files from the form params + * @param formData: FormData object + * @returns FormData object + */ + filterEmptyFilesFromForm(formData) { + try { + for (const [key, val] of formData) { + if (val instanceof File && !val.name && !val.size) { + formData.delete(key); + } + } + } catch (e) { + console.error(e); + } + return formData; + } + /** * Since $productView can be dynamically inserted using render_with, * We have to retrieve the respective elements @@ -234,7 +253,7 @@ export default class ProductDetails { this.$overlay.show(); // Add item to cart - utils.api.cart.itemAdd(new FormData(form), (err, response) => { + utils.api.cart.itemAdd(this.filterEmptyFilesFromForm(new FormData(form)), (err, response) => { const errorMessage = err || response.data.error; $addToCartBtn