iframe無刷新文件上傳其實就是在當前頁面打開了上傳程序的頁面,有點像ajax局部刷新一個,只是我們把它放到了iframe頁面中上傳,同時我們把iframe頁面給隱藏了。
一個最原始最簡單的iframe上傳例子:本例中采用iframe名字,所以表單在提交時會在iframe內打開鏈接(即無刷新,確切的說應該是感覺無刷新),在表單提交時,調用startUpload方法,當然這是JS定義的。
前臺上傳頁面index.html,主要是一個表單與一個js回調函數,上傳文件時,form表單的method、 enctype屬性必須和下面代碼一樣。然后將target的值設為iframe的name,這樣就可以實現無刷新上傳文件,代碼如下:
- <title>上傳文件</title>
- <script>
- function CallbackFunction(str){
- alert("上傳成功");
- }
- </script>
- <form action="uploadfile.php" enctype="multipart/form-data" method="post" target="iframeUpload">
- <iframe name="iframeUpload" src="" width="350" height="35" frameborder=0 SCROLLING="no" style="display:NONE"></iframe>
- <input id="test_file" name="test_file" type="file">
- <input value="上傳文件" type="submit">
- </form>
后臺上傳處理頁面uploadfile.php,這段代碼為簡單的上傳代碼,沒有進行錯誤及異常處理。上傳代碼執行完成后,要告訴父頁面已經上傳完畢了,因此,在這個頁面里調用父頁面的回調函數CallbackFunction,這個函數可以有參數,形式自己定義,代碼如下:
- <?php
- set_time_limit(0);
- if($_SERVER['REQUEST_METHOD']=='POST') {
- move_uploaded_file($_FILES["test_file"]["tmp_name"],
- dirname($_SERVER['SCRIPT_FILENAME'])."/UploadTemp/" . $_FILES["test_file"]["name"]);
- echo "<script>window.parent.CallbackFunction();</script>";
- }
- ?>
以上是用iframe實現無刷新上傳文件的簡單方法,想要健壯的程序的話需要再細化.
PHP無刷新實例2:PHP利用iframe上傳文件并返回值到父框架,其實也是采用這樣的做發法的,正好看到有童鞋博客上有這樣寫,就順手貼過來了,代碼如下:
- if($result)
- {
- echo "上傳成功!文件路徑為:".$file2;
- echo '<input name="img" type="hidden" value="'.$file2.'" id="img"/>';
- echo'<script>parent.document.form1.img.value=document.getElementById("img").value;</script>';
- }
文件上傳成功后,把文件路徑寫入一個隱藏的域中(img),然后用DOM原理把隱藏域中的VALUE發送到父框架的表單form1的img文本框中:ok,編輯器用了tinyMCE,所以有一點點不一樣,我的form頁,代碼如下:
- <script src="tiny_mce/tiny_mce.js" type="text/javascript"></script>
- <script type="text/javascript">
- // O2k7 skin
- tinyMCE.init({
- // General options
- mode : "exact",
- elements : "content",
- theme : "advanced",
- skin : "o2k7",
- language : "zh",
- relative_urls : false,
- //....略過部分...
- });
- function InsertHtml(type,path){
- type=type.toLowerCase()
- switch(type){
- case '.gif':
- thecode = '<img src="'+path+'" alt=""/>';
- break;
- case '.jpg':
- thecode = '<img src="'+path+'" alt=""/>';
- break;
- //......略過部分......
- default :
- thecode = '<a href="'+path+'" target="_blank">Download</a>';
- break;
- }
- tinyMCE.execCommand('mceInsertContent',true,thecode);
- }
- </script>
iframe也就是在這個頁面里了,在我的iframe的提交給的php處理里,代碼如下:
- $pasteJS = "<script type=text/javascript>n";
- $pasteJS .= "parent.InsertHtml("" . $file_ext . "","" . $upload_src . "");n";
- $pasteJS .= "</script>n";
- echo $pasteJS;
于是上傳的文件就跑到tinyMCE的編輯框里了,upload的文件路徑也通過userdata會暫存起來,直到寫入database。路徑保存這塊兒,也是在iframe的提交給的php處理文件里的,這里就不多寫了。
新聞熱點
疑難解答