2009-08-21 39 views
0

我想讓用戶選擇一個文件,然後讓php把內容放入db。現在最後一部分(在php中處理文件)很容易。但有沒有一種方法可以處理用戶選擇的文件而不需要新的頁面加載?上傳和處理用戶在html,javascript和php中選擇的文件

如果我使用以下命令:

<FORM ACTION="upload.php" METHOD="post" ENCTYPE="multipart/form-data"> 
<INPUT TYPE="file" NAME="somefile"><BR /> 
<INPUT TYPE="submit" NAME="submit" VALUE="Upload"> 
</FORM> 

頁upload.php的automaticaly加載後,我可以插入到數據庫中上傳的文件。

我想使用JavaScript,PHP和xajax的組合來處理文件。我不認爲這樣的事情是可能的:

<FORM ACTION="javascript:xajax_proces_file()" METHOD="post" ENCTYPE="multipart/form-data"> 
<INPUT TYPE="file" NAME="somefile"><BR /> 
<INPUT TYPE="submit" NAME="submit" VALUE="Upload"> 
</FORM> 

因爲當函數xajax_process_file()被調用的文件沒有上傳。或者是?我想我沒有完全掌握用javascript,html和php上傳的原理。

任何幫助和或澄清非常感謝。

回答

2

它可以幫助認爲這是兩一步過程。

首先,用戶填寫表單並提交它 - 第一步。

秒(這是默認操作),指定的目標文件從窗體獲取輸入並使用它來執行任何操作。您幾乎可以將表單「動作」視爲鏈接 - 鏈接單擊的默認操作是顯示鏈接的結果。表單動作也是如此 - 顯示錶單動作的結果。

現在,可以通過JavaScript禁用特定事件的元素的默認操作。也可以通過JavaScript訪問瀏覽器HTTP機制來發送/接收HTTP請求(這是每個頁面請求的要求 - 無論是從您的URL欄或頁面鏈接還是Google搜索結果)。

這就是AJAX的簡單說法 - 使用JavaScript使用瀏覽器HTTP機制向Web服務器發送請求,並且可能在不使用傳統的單擊事件的情況下接收響應。然後,將這與使用JavaScript「關閉」默認操作相結合,而是按照您指定的操作從服務器獲取信息並將其添加到頁面,而無需刷新頁面。

很多時候爲了防止某個元素髮生錯誤動作,您在代碼中返回false。你的表單也一樣。使用Javascript:

form.onSubmit = function() { 
    blah blah blah.....Use ajax to send the information to the form handler 
    return false; //Prevents the defualt action of the submit event 
} 

如果你是真正的新的AJAX,我建議你看看這個tutorial然後這個one。最後,我會推薦使用像jQuery這樣的Javascript框架來幫助你 - 它很棒,並且有很多很棒的東西,但也很容易,並且內置了AJAX功能。

這是另一個tutorial做表單提交時沒有頁面刷新(使用jquery)。

+0

謝謝你的回答。我確實瞭解Ajax的原理,並已經使用xajax和jquery。然而,我不明白上傳與Ajax結合的原理。我希望上一個教程能夠使用上傳表單,但不知道該如何工作。建議任何人? – jzp74 2009-08-22 12:30:37

+0

我現在明白了:不可能有真正的ajax上傳。我現在使用Valums Ajax從http://valums.com/ajax-upload/上傳 – jzp74 2009-08-22 19:40:20

0

一種替代方法是使窗體指導行動的iframe,處理在iframe查詢後,通過JS進行清除父親的形式