jQuery插件之ajaxFileUpload上傳文件

ajaxFileUpload.js 不少同名的,由於作出來一個很容易。javascript

我用的是這個:https://github.com/carlcarl/AjaxFileUploadhtml

下載地址在這裏:http://files.cnblogs.com/files/kissdodog/ajaxfileupload_JS_File.rarjava

AjaxFileUpload.js並非一個很出名的插件,只是別人寫好的放出來供你們用,原理都是建立隱藏的表單和iframe而後用JS去提交,得到返回值。jquery

異步上傳的功能,選擇它由於它的配置方式比較像jQuery的AJAXgit

ajaxFileUpload是一個異步上傳文件的jQuery插件github

語法:$.ajaxFileUpload([options])ajax

options參數說明:express

一、url            上傳處理程序地址。 json

2,fileElementId       須要上傳的文件域的ID,即<input type="file">的ID。瀏覽器

3,secureuri        是否啓用安全提交,默認爲false。

4,dataType        服務器返回的數據類型。能夠爲xml,script,json,html。若是不填寫,jQuery會自動判斷。

5,success        提交成功後自動執行的處理函數,參數data就是服務器返回的數據。

6,error          提交失敗自動執行的處理函數。

7,data             自定義參數。這個東西比較有用,當有數據是與上傳的圖片相關的時候,這個東西就要用到了。

8, type                 當要提交自定義參數時,這個參數要設置成post

錯誤提示:

1,SyntaxError: missing ; before statement錯誤

  若是出現這個錯誤就須要檢查url路徑是否能夠訪問

2,SyntaxError: syntax error錯誤

  若是出現這個錯誤就須要檢查處理提交操做的服務器後臺處理程序是否存在語法錯誤

3,SyntaxError: invalid property id錯誤

  若是出現這個錯誤就須要檢查文本域屬性ID是否存在

4,SyntaxError: missing } in XML expression錯誤

  若是出現這個錯誤就須要檢查文件name是否一致或不存在

5,其它自定義錯誤

  你們可以使用變量$error直接打印的方法檢查各參數是否正確,比起上面這些無效的錯誤提示仍是方便不少。

使用方法:mvc例子附帶參數上傳

<html>

<head>

    <script src="/jquery-1.7.1.js" type="text/javascript"></script>

    <script src="/ajaxfileupload.js" type="text/javascript"></script>

    <script type="text/javascript">

        $(function () {

            $(":button").click(function () {

                if ($("#file1").val().length > 0) {

                    ajaxFileUpload();

                }

                else {

                    alert("請選擇圖片");

                }

            })

        })

        function ajaxFileUpload() {

            $.ajaxFileUpload

            (

                {

                    url: '/Home/Upload', //用於文件上傳的服務器端請求地址

                    type: 'post',

                    data: { Id: '123', name: 'lunis' }, //此參數很是嚴謹,寫錯一個引號都不行

                    secureuri: false, //通常設置爲false

                    fileElementId: 'file1', //文件上傳空間的id屬性  <input type="file" id="file" name="file" />

                    dataType: 'json', //返回值類型 通常設置爲json

                    success: function (data, status)  //服務器成功響應處理函數

                    {

                        alert(data);

                        $("#img1").attr("src", data.imgPath1);

                        alert("你請求的Id是" + data.Id + "     " + "你請求的名字是:" + data.name);

                        if (typeof (data.error) != 'undefined') {

                            if (data.error != '') {

                                alert(data.error);

                            } else {

                                alert(data.msg);

                            }

                        }

                    },

                    error: function (data, status, e)//服務器響應失敗處理函數

                    {

                        alert(e);

                    }

                }

            )

            return false;

        }

    </script>

</head>

<body>

    <p><input type="file" id="file1" name="file" /></p>

    <input type="button" value="上傳" />

    <p><img id="img1" alt="上傳成功啦" src="" /></p>

</body>

</html>

後臺代碼:省略。。。

此實例在顯示出異步上傳圖片的同時並彈出自定義傳輸的參數。本實例下載地址

今天調試過程當中發現一個問題,就是做爲文件域(<input type="file">)必需要有name屬性,若是沒有name屬性,上傳以後服務器是獲取不到圖片的。如:正確的寫法是<input type="file" id="file1" name="file1" />

最經典的錯誤終於找到緣由所在了。Object function (a,b){return new e.fn.init(a,b,h)} has no method 'handleError',這個是google瀏覽器報的錯誤,很是經典, 不知道是個人版本問題仍是真正存在的問題。這個問題的根源通過N次上傳才找到問題的根本所在。答案是:dataType參數必定要大寫。如:dataType: 'HTML'。

評論中的一個錯誤:TypeError: $.ajaxFileUpload is not a function   咱們用的不是同一個JS,你下了別的AJAXFileUpload去了。

相關文章
相關標籤/搜索