IFrame回调,服务器响应未出现在客户端上

时间:2009-11-10 23:30:27

标签: wcf http upload

感谢您点击。

我正在尝试使用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中看到任何内容,更不用说动态更改消息。

有人可以帮忙吗?

3 个答案:

答案 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/

帮助是西班牙语,但代码就在那里。