1. 程式人生 > >利用jquery&iframe標籤實現頁面無跳轉的表單檔案上傳

利用jquery&iframe標籤實現頁面無跳轉的表單檔案上傳

最近公司專案修改上傳檔案效果,大致效果就是上傳檔案提交時不能進行頁面跳轉,然後最好是沒有提交按鈕,用jquery實現表單的提交。想了想,用ajax好像不太好實現這種效果了,首先是ajax如何把上傳的檔案傳遞給後臺就遇到了瓶頸;其次再是如何配合ajax實現jquery提交表單,最後在網上查了下資料,用iframe標籤來實現會非常的方便。

實現步驟

  • 首先在頁面上寫上iframe標籤,並將iframe標籤的style設定為“display:none”,而且將iframe標籤的name屬性設定為,這裡我們就將iframe標籤的name屬性設定為disIframe
  • 其次,將檔案上傳表單的target屬性設定為iframe標籤設定的name屬性值,上邊我們已經設定為disIframe
  • 再就是我們給檔案上傳的form設定一個id ,這裡我們設定為fileupload,利用jquery的id選擇器得到這個form,並呼叫其submit方法就可以得到在jquery中不跳轉頁面提交檔案上傳表單
  • 最後,可以判斷通過提交給iframe標籤的內容來執行相應操作

就單單看iframe執行的這個邏輯,我們就可以看出其實執行邏輯和ajax似乎沒有區別,的卻,在ajax還沒有火起來的時候,都是用iframe來執行類似於ajax的功能的。

詳細說明


  • iframe標籤的設定
<iframe style="display: none" id="disIframe" name="disIframe"
>
</iframe>

  • form表單的設定
  • <form  id="fileupload" action="report/singlecheckupload.koala" method="post" enctype="multipart/form-data" target="disIframe">
    
    <input type="file"  name="file">
    
    </form>
    順便提一下,form提交上傳檔案必須將enctype設定為multipart/form-data
  • jquery程式碼實現提交表單
  •   $(
    "#fileupload").submit();
    我將這個程式碼寫在另一個標籤的click方法內,當點選那個標籤時就會執行這一個方法。
  • 通過iframe標籤中的返回內容執行相應操作
  •   $("#disIframe").load(function() {
                var body = $(window.frames['disIframe'].document.body);
                console.log(body);
    
                if (body[0].textContent == "success") {
                }
            });

    在訪問上邊form的action的時候,可能會返回success,可能會返回error,通過判斷body[0].textContent值來執行form提交完成後的程式碼邏輯。

    總結

    iframe加上jquery提交可以實現頁面無跳轉,不必要單獨去點選form的提交按鈕去執行form提交。