使用 Javascript 从加载的 iframe 中检索 HTTP 状态代码

Posted

技术标签:

【中文标题】使用 Javascript 从加载的 iframe 中检索 HTTP 状态代码【英文标题】:Retrieving HTTP status code from loaded iframe with Javascript 【发布时间】:2010-09-07 07:22:12 【问题描述】:

我使用 jQuery Form 插件进行异步表单提交。对于包含文件的表单,它会将表单复制到隐藏的 iframe、提交并复制回 iframe 的内容。问题是我不知道如何找到服务器返回的 HTTP 状态代码。例如,如果服务器返回 404,则 iframe 中的数据将被正常复制并视为常规响应。

我尝试在 iframe 对象中四处寻找某种 status_code 属性,但找不到类似的东西。


不能使用$.ajax()函数,因为它不支持上传文件。我知道的异步上传文件的唯一方法是使用隐藏的iframe 方法。

【问题讨论】:

为什么不在结果 iframe 上运行一些 js?我的意思是,您可以为页面加载(在父级上)设置超时,并且子级(iframe)应该在父级中设置一个值。如果在超时之前未设置该值,则 iframe 失败。 如果您先将read the file 转换为字符串,则可以使用ajax,然后像普通的旧POST 一样提交它 【参考方案1】:

JS无法获取页眉,但可以区分错误和成功: 试试这样的:

<script type="text/javascript">

    var uploadStarted = false;
    function OnUploadStart()            
        uploadStarted = true;
    

    function OnUploadComplete(state,message)       

       if(state == 1)
        alert("Success: "+message);     
       else
         if(state == 0 && uploadStarted)
            alert("Error:"+( message ? message : "unknow" ));
       

</script>


<iframe id="uploader" name="uploader" onload="OnUploadComplete(0)" style="width:0px;height:0px;border:none;"></iframe>

<form id="sender" action="/upload.php" method="post" target="uploader" enctype="multipart/form-data" onsubmit="OnUploadStart()">
<input type="file" name="files[upload]"/>
<input type="submit" value="Upload"/>
</form>

在服务器端:

/*
  file: upload.php
*/
<?php 

   // do some stuff with file       

  print '<script type="text/javascript">';
  if(success)
     print 'window.parent.OnUploadComplete(1,"File uploaded!");';
  else
     print 'window.parent.OnUploadComplete(0, "File too large!");';
  print  '</script>';
?>

【讨论】:

如果文件太大,php会500,阻止显示你的错误信息。【参考方案2】:

您无法直接从加载的“iframe”中检索 HTTP 状态代码。 但是当发生 http 错误时,服务器不会向“iframe”返回任何内容。 所以 iframe 没有内容。 您可以检查 iframe 正文,当 iframe 正文为空白时,使用具有相同 url 的 ajax 从服务器获取响应。然后您可以从响应中检索 http 状态码。

【讨论】:

大错特错。这只是一种常见的情况,但甚至不是惯例或良好做法。 HTTP 服务器通常应发送包含错误消息的响应正文。 在使用“iframe”下载文件的情况下,与一般的HTTP请求不同。特别是,IE9 会用本地错误页面替换“iframe”正文,除非 HTTP 状态为 200。因此,当您尝试获取 iframe 的正文时,您将收到跨域错误。 @Lothar

以上是关于使用 Javascript 从加载的 iframe 中检索 HTTP 状态代码的主要内容,如果未能解决你的问题,请参考以下文章

在“src”上使用 javascript 变量时未加载 Google Maps iFrame

阻止 iframe 使用 javascript 加载页面

从 iFrame 加载顶部框架中的页面

如何在 iframe 之后自动加载 javascript

优化完全相同的 iframe 的加载

iFrame 加载 JavaScript 事件