ホームページ  >  記事  >  php教程  >  jQueryプラグインajaxFileUpload使用例分析

jQueryプラグインajaxFileUpload使用例分析

高洛峰
高洛峰オリジナル
2016-12-09 16:01:441253ブラウズ

AjaxFileUpload.js はあまり有名なプラグインではありません。これは他の人が作成し、誰でも使用できるようにリリースされています。その原理は、非表示のフォームと iframe を作成し、JS を使用してそれらを送信し、戻り値を取得することです。

私はもともと非同期アップロード関数を作成しました。その設定方法が jQuery の AJAX に似ているため、これを選択しました。これは非常に気に入っています。

コメントで言われていることは機能しません。それは、同じ js を使用していないからです。 github で AjaxFileUpload を検索すると、同様の JS がたくさん見つかりました。

ajaxFileUpload は、非同期ファイルアップロード用の jQuery プラグインです

不明なバージョンをアップロードすると、今後どこでもそのバージョンを探す必要がなくなります。

構文:$.ajaxFileUpload([options])

optionsパラメータの説明:

1, url アップロードハンドラのアドレス。
2, fileElementId アップロードする必要があるファイル フィールドの ID、つまり 3525558f8f338d4ea90ebf22e5cde2bc の ID。
3, secureuri 安全な送信を有効にするかどうか、デフォルトは false です。
4, dataType サーバーから返されるデータ型。 XML、スクリプト、JSON、HTML を使用できます。入力しない場合は、jQuery が自動的に判断します。
5、成功 送信成功後に自動的に実行される処理関数です。パラメータデータはサーバーから返されるデータです。
6、エラー 送信失敗時に自動的に実行される処理関数。
7、データ カスタムパラメータ。アップロードした画像に関連するデータがある場合は、こちらの方が便利です。
8、カスタムパラメータを送信するときは、このパラメータをpostに設定する必要があります

エラーメッセージ:

1. SyntaxError: missing; before state error
このエラーが発生した場合は、URL パスがアクセス可能かどうかを確認する必要があります。
2. SyntaxError: 構文エラー
このエラーが発生した場合は、送信操作を処理するサーバー バックグラウンド ハンドラーに構文エラーがあるかどうかを確認する必要があります
3. SyntaxError: 無効なプロパティ ID エラー
このエラーが発生した場合は、テキスト フィールドの属性 ID が存在するかどうかを確認します
4. XML 式エラーで SyntaxError: missing } を使用します
このエラーが発生した場合は、ファイル名が一致しているかどうかを確認する必要があります
他のカスタム エラー
を使用できます。変数 $error を直接出力して、各パラメータが正しいかどうかを確認する方が、上記の無効なエラー プロンプトよりもはるかに便利です。

使用方法:

ステップ 1: まず、jQuery プラグインと ajaxFileUpload プラグインを導入します。言うまでもなく、これはすべてのプラグインに当てはまります。

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

ステップ 2: HTML コード:

<body>
 <p><input type="file" id="file1" name="file" /></p>
 <input type="button" value="上传" />
 <p><img id="img1" alt="上传成功啦" src="" /></p>
</body>

ステップ 3: JS コード

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

ステップ 4: バックエンド ページの Upload.aspx コード:

protected void Page_Load(object sender, EventArgs e)
{
  HttpFileCollection files = Request.Files;
  string msg = string.Empty;
  string error = string.Empty;
  string imgurl;
  if (files.Count > 0)
  {
    files[0].SaveAs(Server.MapPath("/") + System.IO.Path.GetFileName(files[0].FileName));
    msg = " 成功! 文件大小为:" + files[0].ContentLength;
    imgurl = "/" + files[0].FileName;
    string res = "{ error:&#39;" + error + "&#39;, msg:&#39;" + msg + "&#39;,imgurl:&#39;" + imgurl + "&#39;}";
    Response.Write(res);
    Response.End();
  }
}

ダウンロードこの例の完全なコード

MVC バージョンの例を見てみましょう:

コントローラー コード

public class HomeController : Controller
{
  public ActionResult Index()
  {
    return View();
  }
 
  public ActionResult Upload()
  {
    HttpFileCollection hfc = System.Web.HttpContext.Current.Request.Files;
    string imgPath = "";
    if (hfc.Count > 0)
    {
      imgPath = "/testUpload" + hfc[0].FileName;
      string PhysicalPath = Server.MapPath(imgPath);
      hfc[0].SaveAs(PhysicalPath);
    }
    return Content(imgPath);
  }
}

フロントエンド ビュー、HTML および JS コード アップロードが成功した後、画像の実際のアドレスを返し、 SRC アドレスにバインドします

<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: &#39;/Home/Upload&#39;, //用于文件上传的服务器端请求地址
          secureuri: false, //一般设置为false
          fileElementId: &#39;file1&#39;, //文件上传空间的id属性 <input type="file" id="file" name="file" />
          dataType: &#39;HTML&#39;, //返回值类型 一般设置为json
          success: function (data, status) //服务器成功响应处理函数
          {
            alert(data);
            $("#img1").attr("src", data);
            if (typeof (data.error) != &#39;undefined&#39;) {
              if (data.error != &#39;&#39;) {
                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>

最後に、パラメーターを使用して画像をアップロードする例を示します。 コントローラー コード:

public class HomeController : Controller
{
  public ActionResult Index()
  {
    return View();
  }
 
  public ActionResult Upload()
  {
    NameValueCollection nvc = System.Web.HttpContext.Current.Request.Form;
 
    HttpFileCollection hfc = System.Web.HttpContext.Current.Request.Files;
    string imgPath = "";
    if (hfc.Count > 0)
    {
      imgPath = "/testUpload" + hfc[0].FileName;
      string PhysicalPath = Server.MapPath(imgPath);
      hfc[0].SaveAs(PhysicalPath);
    }
    //注意要写好后面的第二第三个参数
    return Json(new { Id = nvc.Get("Id"), name = nvc.Get("name"), imgPath1 = imgPath },"text/html", JsonRequestBehavior.AllowGet);
  }
}

インデックス ビュー コード:

<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: &#39;/Home/Upload&#39;, //用于文件上传的服务器端请求地址
          type: &#39;post&#39;,
          data: { Id: &#39;123&#39;, name: &#39;lunis&#39; }, //此参数非常严谨,写错一个引号都不行
          secureuri: false, //一般设置为false
          fileElementId: &#39;file1&#39;, //文件上传空间的id属性 <input type="file" id="file" name="file" />
          dataType: &#39;json&#39;, //返回值类型 一般设置为json
          success: function (data, status) //服务器成功响应处理函数
          {
            alert(data);
            $("#img1").attr("src", data.imgPath1);
            alert("你请求的Id是" + data.Id + "   " + "你请求的名字是:" + data.name);
            if (typeof (data.error) != &#39;undefined&#39;) {
              if (data.error != &#39;&#39;) {
                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>

画像を非同期でアップロードしているときに、カスタム送信パラメータがポップアップ表示されます。この例のダウンロード アドレス

2013 年 1 月 28 日、今日のデバッグ プロセス中に問題が発見されました。つまり、ファイル フィールド (3525558f8f338d4ea90ebf22e5cde2bc) として、name 属性が必要です。 name属性が無い場合、アップロード後サーバーが画像を取得できません。例: 正しい書き方は 1625fd9857f7b13408acebf8011bf09a

2013 年 1 月 28 日、最も典型的なエラーの原因がついに判明しました。オブジェクト関数 (a,b){return new e.fn.init(a,b,h)} にはメソッド 'handleError' がありません。これは非常に古典的なエラーです。それは私のバージョンの問題かどうかです。この問題の根本原因は、N 回のアップロード後に判明しました。答えは、dataType パラメータは大文字である必要があります。例: dataType: 'HTML'。

2016-07-28、コメントのエラー: TypeError: $.ajaxFileUpload is not a function 同じ JS を使用していません。別の AJAXFileUpload をダウンロードしました。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。