Skip to content

Instantly share code, notes, and snippets.

@Jabher
Last active December 22, 2015 10:49
Show Gist options
  • Save Jabher/6461793 to your computer and use it in GitHub Desktop.
Save Jabher/6461793 to your computer and use it in GitHub Desktop.
iframe ajax uploader
$('body').on('submit', 'form.remote', function (e) {
e.preventDefault();
var form = this;
form.xhrSend(function (responseData) {
form.reset();
window.images.add(responseData.src)
});
return false
});
Object.defineProperty(HTMLFormElement.prototype, 'xhrSend', {value:
(function () {
var createIframe, setFormProperties;
createIframe = function (name) {
var iframe;
iframe = window.document.createElement('iframe');
iframe.setAttribute("id", name);
iframe.setAttribute("name", name);
iframe.setAttribute("width", "0");
iframe.setAttribute("height", "0");
iframe.setAttribute("border", "0");
iframe.setAttribute("style", "width: 0; height: 0; border: none;");
return iframe;
};
setFormProperties = function (form, name) {
form.setAttribute("target", name);
form.setAttribute("method", "post");
form.setAttribute("enctype", "multipart/form-data");
form.setAttribute("encoding", "multipart/form-data");
};
return function (callback) {
var eventHandler, iframe, iframeId;
var form = this;
var iframe_name = 'upload_iframe_'+(new Date).valueOf();
iframe = createIframe(iframe_name);
form.parentNode.appendChild(iframe);
window.frames[iframe_name].name = iframe_name;
iframeId = window.document.getElementById(iframe_name);
eventHandler = function () {
var content;
iframeId.removeEventListener("load", eventHandler, false);
if (iframeId.contentDocument) {
content = iframeId.contentDocument.body.innerHTML;
} else if (iframeId.contentWindow) {
content = iframeId.contentWindow.document.body.innerHTML;
} else if (iframeId.document) {
content = iframeId.document.body.innerHTML;
}
try {
content = JSON.parse(content)
} catch (e) {}
callback(content);
return setTimeout(function () {
iframeId.parentNode.removeChild(iframeId)
}, 250);
};
iframeId.addEventListener("load", eventHandler, true);
setFormProperties(form, iframe_name);
return form.submit();
}
})()
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment