2009-11-10 115 views
1

感謝點擊。IFrame回調,服務器響應沒有出現在客戶端

我想獲得使用IFrame進行文件上傳的狀態反饋。我並非試圖取得進展或百分比 - 只是當一個文件完成上傳,如果它是成功或失敗。

問題是,我似乎無法讓服務器響應 出現在客戶端上。我有如下的設計:

我有我的網頁上的iframe:

<iframe id="target_frame" src="" style="border:0px; width:0px; height:0px"></iframe> 

形式標記指向它:

<form enctype="multipart/form-data" id="fileUploadForm" name="fileUploadForm" action="picupload.aspx" method="post" target="target_frame"> 

而且提交按鈕通過iframe的啓動文件上傳:

<input id="submit" type="submit" value="upload" /> 

在picupload.aspx.cs文件,我有一個返回的方法10個動態數據。我然後將其發送到客戶端:

message = data; 
Response.Write(String.Format("<script language='javascript' type='text/javascript'>window.parent.handleResponse('{0}');</script>", message)); 

在客戶端,我有一個響應處理:

function handleResponse(msg) { 
     document.getElementById('statusDiv').innerHTML = msg; 
    } 

我的意圖是要看到每個上傳的文件味精值的變化,但我從來沒有看到任何東西出現在statusDiv中,更不用說動態改變消息。

有人請幫忙嗎?

+0

我認爲你的代碼已經失蹤 –

+0

謝謝賈斯汀。我忘了點擊「代碼」按鈕。你應該能夠看到所有東西:) –

+0

上傳完成後,你可以得到任何類型的JavaScript執行框架中?像alert(1)一樣簡單;'? –

回答

0

在你提供更多的代碼之前,我只能猜測這個問題。我會首先檢查以確保iframe頁面(picupload.aspx.cs)與包含iframe的頁面位於同一個域中。

+0

謝謝賈斯汀。是的,相同的域名。我只是意識到我需要添加「代碼」包裝,以便人們可以查看我的代碼。讓我知道如果你想看到別的東西... –

1

我一直無法找到一種方法來檢測iframe的服務器響應,但它看起來像iframe只是爲了顯示錶單提交請求的結果而不刷新頁面。如果是這樣,那麼也許你可以用XHR來代替iframe

爲了簡單起見,我建議使用一些Ajax library的味道,但是我有幾種情況,由於某種原因,這不是一種選擇。下面是一個玩具示例,說明如何使用不帶AJAX的JavaScript製作XHR表單提交請求。

注意:這個例子假定form沒有發送文件數據(這是一個完整的其他水壺,並且用AJAX更好地處理)。它也不會提交<select><textarea>標記的值,但您肯定可以擴展javascript來處理這些標記。

/* HTML */ 
<form action="script.php" method="post" // these are up to you 
    onsubmit="sendFormRequest(this); return false;"> 

/* Javascript */ 
function sendFormRequest(form){ 
    var fields = form.getElementsByTagName('input'); 
    var data = []; 
    for(var i=0; i<fields.length; ++i){ 
     if(fields[i].getAttribute('type') != 'submit') 
      data[i] = escape(fields[i].name) + '=' + escape(fields[i].value); 
    } 
    var req = new XMLHttpRequest(); 
    req.open(form.getAttribute('method'), form.getAttribute('action'), false); 
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
    req.send(data.join('&')); 
    return {'status':req.status, 'responseBody':req.responseText}; 
} 

/* Returns */ 
Object { status=200, responseBody="<!DOCTYPE html PUB ... \n</body>\n</html>\n" } 

我懷疑這個帖子仍然是相關的,我主要回答它,因爲它在搜索結果中出現似乎並沒有有一個快速的,可用的答案。

相關問題