感谢您点击。
我正在尝试使用IFrame获取状态反馈以进行文件上传。我不是想要取得进步或百分比 - 只是当文件上传完成并且成功或失败时。
问题是我似乎无法获得服务器响应 出现在客户端上。我必须遵循以下设计:
我的页面上有一个iframe:
<iframe id="target_frame" src="" style="border:0px; width:0px; height:0px"></iframe>
表单标记指向它:
<form enctype="multipart/form-data" id="fileUploadForm" name="fileUploadForm" action="picupload.aspx" method="post" target="target_frame">
提交按钮通过iframe启动文件上传:
<input id="submit" type="submit" value="upload" />
在picupload.aspx.cs文件中,我有一个返回的方法 动态数据。然后我将它发送给客户:
message = data;
Response.Write(String.Format("<script language='javascript' type='text/javascript'>window.parent.handleResponse('{0}');</script>", message));
在客户端上,我有一个响应处理程序:
function handleResponse(msg) {
document.getElementById('statusDiv').innerHTML = msg;
}
我的目的是查看每个上传文件的msg值更改但我从未在statusDiv中看到任何内容,更不用说动态更改消息。
有人可以帮忙吗?
答案 0 :(得分:1)
我一直无法找到检测iframe
服务器响应的方法,但看起来iframe
的目的只是为了显示表单提交请求的结果页面刷新。如果是这样,那么您可以使用XHR来代替iframe
。
为了简单起见,我建议使用一些Ajax library的风格,但我有一些情况,由于某种原因,这不是一个选项。这是一个玩具示例,说明如何使用没有AJAX的Javascript进行XHR表单提交请求。
注意:此示例假设form
没有发送文件数据(这是另一个鱼群,使用AJAX处理得更好)。它也不会提交<select>
或<textarea>
标记的值,但您当然可以扩展javascript来处理这些标记。
/* HTML */
<form action="script.php" method="post" // these are up to you
onsubmit="sendFormRequest(this); return false;">
/* Javascript */
function sendFormRequest(form){
var fields = form.getElementsByTagName('input');
var data = [];
for(var i=0; i<fields.length; ++i){
if(fields[i].getAttribute('type') != 'submit')
data[i] = escape(fields[i].name) + '=' + escape(fields[i].value);
}
var req = new XMLHttpRequest();
req.open(form.getAttribute('method'), form.getAttribute('action'), false);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.send(data.join('&'));
return {'status':req.status, 'responseBody':req.responseText};
}
/* Returns */
Object { status=200, responseBody="<!DOCTYPE html PUB ... \n</body>\n</html>\n" }
我怀疑这篇文章是否仍然相关,我主要回复它,因为它出现在搜索结果中,似乎没有快速,有用的答案。
答案 1 :(得分:0)
在您提供更多代码之前,我只能猜测问题。我首先检查以确保iframe页面(picupload.aspx.cs)与包含iframe的页面位于同一域中。
答案 2 :(得分:0)
希望这会有所帮助:
http://www.nbsp.es/2007/11/23/up-libreria-para-subir-archivos-de-forma-oculta/
帮助是西班牙语,但代码就在那里。