由于我没有访问服务器端,我需要在客户端解决这个问题。这就是为什么我不能使用cookies。
我做了这些步骤来取得成功(我使用jQuery创建/绑定元素/事件。我没有使用AJAX发送表单数据):
1.我有iframe在我的HTML(注意,那里HTML中没有iframe
):
<form id ="send_message_form" target="multipart_uploader_iframe"
method="post" enctype="multipart/form-data" action="/upload_file">
<input type="file" name="upload_image" />
<input type="submit" value="Submit" />
</form>
2.我创建iframe
提交单击时(我试图避免不必要的onload
事件触发)。注意,在将iframe
添加到身体后,我添加了属性onload
。因为如果我在创建iframe时添加了onload属性,当我将iframe
添加到body
时,它立即被解雇。当服务器响应时,现在调用closePopup
一次。
$('#send_message_form').submit(function() {
var customIframe = $('<iframe></iframe>');
customIframe.attr({
'id': "multipart_uploader_iframe",
'name': "multipart_uploader_iframe"
});
$('body').append(customIframe);
customIframe.attr({
'onload': "closePopup();"
});
return true;
});
3.当服务器responseText的响应,responseText的将放在iframe
体(如果它与text/plain的类型返回)。然后iframe
的onload事件发生(当然我们的closePopup功能)。
// Generated by CoffeeScript
window.closePopup = function() {
var error, response, _ref, _ref1;
setTimeout(function() {
return $('#multipart_uploader_iframe').remove();
}, 500);
try {
response = (_ref = (_ref1 = frames['multipart_uploader_iframe']) != null ?
_ref1.document.getElementsByTagName("body")[0].innerHTML : void 0) != null ? _ref : "";
if (response.indexOf("OK") !== -1) {
// close here your popup or do something after successful response
alert('Message has been sent successfully.');
return $(".popup").dialog('close');
}
} catch (_error) {
error = _error;
throw new Error(error);
}
return alert("Error occurred while sending message.");
};
我真的this文章的启发:在我的情况下服务器OK或其他错误文本回应。我希望这可以帮助有同样问题的人。
PS:它在IE8上工作
除非你使用AJAX,否则提交表单会刷新页面,所以你无法检测到它。 – Barmar 2013-05-07 06:54:14
如果您提交表单,将会加载一个新页面。所以你的JS停下来存在。 – Thilo 2013-05-07 06:54:15
只有当你没有在窗体上设置'target'作为另一个窗口(可以是iframe)时,上述内容才是真实的。 – 2013-05-07 07:26:44