2008-08-29 97 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狀態碼。