47

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

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


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

4

2 回答 2

19

您无法通过 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>';
?>
于 2009-12-04T16:09:16.847 回答
-4

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

于 2015-03-16T02:13:22.177 回答