我使用jQuery Form插件进行异步表单提交。 对于包含文件的表单,它会将表单复制到隐藏的iframe中,然后提交,然后复制回iframe的内容。 问题是我不知道如何查找服务器返回的HTTP状态代码。 例如,如果服务器返回404,则来自iframe的数据将被正常复制并视为常规响应。
我试着在iframe对象中四处寻找某种status_code属性,但是还没有找到类似的东西。
$.ajax()函数不能使用,因为它不支持上传文件。 异步上传我所知道的文件的唯一方法是使用隐藏的iframe方法。
您无法通过JS获取页面标题,但可以将错误与成功区分开:
尝试这样的事情:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <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" ));
}
<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> |
在服务器端:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| /*
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 '';
?> |
您无法直接从已加载的" iframe"中检索HTTP状态代码。
但是,当发生http错误时,服务器将不会向" iframe"返回任何内容。
因此,iframe不满意。
您可以检查iframe主体,如果iframe主体为空白,请使用具有相同网址的ajax从服务器获取响应。 然后,您可以从响应中检索http状态代码。