2008-08-29 78 views
43

我使用jQuery Form插件进行异步表单提交。对于包含文件的表单,它会将表单复制到隐藏的iframe中,提交它并复制iframe的内容。问题是我无法弄清楚如何找到服务器返回的HTTP状态码。例如,如果服务器返回404,那么iframe中的数据将被正常复制并作为常规响应处理。从Javascript中加载的iframe中检索HTTP状态代码

我试过在iframe对象中寻找某种status_code属性,但一直没能找到类似的东西。


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

+1

为什么不在结果iframe上运行一些js? 我的意思是,您可以为页面加载(在父级上)设置超时,并且子级(iframe)应该在父级中设置一个值。 如果该值在超时之前未设置,则iframe失败。 – Dementic 2011-05-24 12:25:20

回答

17

您无法通过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>'; 
?> 
+3

如果文件太大,php将会500,从而阻止显示错误消息。 – KyleWpppd 2012-02-29 21:01:49

+0

这不是一个解决方案... – Isaac 2017-10-24 04:04:18

-1

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