如何在 Javascript 函数中拦截 Web 服务器响应

How to intercept webserver response in Javascript function

本文关键字:Web 服务器 响应 Javascript 函数      更新时间:2023-09-26

这是我的困境。在我的 JSP 中,我正在尝试上传一个文件,该文件又转到 JS 函数。在我的JS函数中,正在创建一个动态iframe,并具有onload函数。onload 函数创建一个动态表单元素并继续提交它。

底层 Web 服务器是 IIS,如果文件大小很大,它会抛出 HTTP 错误 404.13,我会收到 HTML 响应。我想处理这个问题,不愿意解析 HTML 来查找错误代码。请建议我应该如何进行。

我的代码看起来像这样:

JSP 内容

<td>
<input type="image" id="uploadfile" src="../images/abc.gif" alt="Upload file" title="Upload File" />
<script type="text/javascript">
    var uploadfile = document.getElementById('uploadfile');
    upload({
        element : uploadfile,
        action : 'upload.jsp',
        onstart : function(filename) {
            document.getElementById("uploaded_file").innerHTML = "Uploading";
        },
        oncomplete : function(response_data) {
            .......//some logic
        }
    });
</script>
</td>

简斯内容

function upload(d) {
    var g = {
        element : null,
        action : "about:blank",
        action_params : {},
        maxsize : 0,
        onstart : null,
        oncomplete : null,
        dataname : "Filedata",
        target : null,
        zindex : "auto"
    };
    .......//some logic
    var c = document.createElement("div");
    .......//some logic
    c.innerHTML = '<iframe name="frameName" src="about:blank" onload="this.onload_callback()"></iframe>';
    .......//some logic
    var i = c.childNodes[0];
    i.onload_callback = function() {
        .......//some logic
        var a = document.createElement("form");
        .......//some logic
        a.submit();
    }
    .......//some logic
}

当您提交表单时,浏览器会在 iframe 中发出新的顶级请求,该请求由浏览器本身处理,因此您无法访问 HTTP 返回代码。您可以做的是侦听 iframe 上的加载事件,或者(不确定它是否在您的控制之下)修改 IIS 响应以返回将结果传达给包含页面的脚本。

请注意,这将难以实现,并且可能难以移植到不同的浏览器,具体取决于支持的平台和所涉及的域。

您可以通过javascript异步提交表单,以完全控制HTTP响应。