2013-03-30 11 views
5

jQuery ajaxを使用して、非常に大きなテキストフィールドを持つフォームのアップロード進捗状況を取得できますか? 私はクライアントがどのくらいのバイトを送信したのか知っていると思うが、私はGoogleだけでサーバーサイトコードを使ってファイルアップロードの解決策を見つける。これは私のAJAX要求であるjQuery AJAX大文字フィールドの進捗状況

$.ajax({ 
     type: "POST", 
     url: "index.php?action=saveNewPost", 
     data: {textbox1: textbox1,textbox2: textbox2}, 
     contentType: "application/x-www-form-urlencoded;charset=UTF-8", 
     success: function(){ 
      // 
     } 
    }); 

私が望んでいたことは、すでに送信されたバイトの量を含むパラメータを指定して「onProgress」ようなものになるだろう...

は解決策を見つけました

$.ajax({ 
     xhr: function() { 
      var req = $.ajaxSettings.xhr(); 
      if (req) { 
       req.upload.addEventListener('progress', function(event) { 
        if (event.lengthComputable) { 
         $('#ajaxFeedbackDiv').html(event.loaded); // = 'test'; //event.loaded + '/' + event.total; 
        } 
       }, false); 
      } 
      return req; 
     }, 
     type: "POST", 
     url: "index.php?action=saveNewPost", 
     data: {textbox1: textbox1,textbox2: textbox2}, 
     contentType: "application/x-www-form-urlencoded;charset=UTF-8" 
     } 
    }); 

がまだあるaltoughこれは、動作しているようです210の

2の問題:それは「進歩」、実際に作業を確認するのは難しいので、

  1. 私はlocalhost上の接続は、あまりにも速いです。私は同じネットワーク上の2台目のMacにこのツールhttp://mschrag.github.comをインストールしました。完全に動作しています。
  2. XHR/HTML5と互換性のないブラウザでフレンドリーになるかどうかわかりません。進捗情報なしでアップロードするだけですか?
+0

をアップロードするプログレスバーを追加します。しかし、それは新しい標準であり、すべてのブラウザがそれをサポートしているわけではありません。 – Licson

+0

私が上に追加したものを見てください、それは動作します。お返事ありがとうございます –

答えて

4

これは、HTML5対応ブラウザの新しいXMLHttpRequestオブジェクトで実現できます。これは、AJAX操作をサブスクライブし、通知することができるprogressイベントをサポートします。ここで

は例です:

document.getElementById('myForm').onsubmit = function() { 
    var xhr = new XMLHttpRequest(); 

    xhr.upload.addEventListener('progress', function(e) { 
     if (e.lengthComputable) { 
      var percentage = Math.round((e.loaded * 100)/e.total); 
      document.getElementById('progress').innerHTML = percentage + '%'; 
     } 
    }, false); 

    xhr.open(this.method, this.action, true); 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4 && xhr.status == 200) { 
      alert(xhr.responseText); 
     } 
    }; 

    xhr.send(new FormData(this)); 
    return false;  
}; 

、ここではlive demoです。

+0

ありがとうございますが、これはHTML5対応のブラウザでのみ動作することになり、jQuery AJAXはもう使用できません。私は互換性のないブラウザでフレンドリーなフォールバック(つまり、進行状況が表示されない)を持っているべきです... –

+0

jQueryのドキュメントでは、jQuery-AJAXリクエストがxhrオブジェクトを返すことがわかりました。私はあなたのprogress-eventlistenerそれは動作しません... –

+0

はい、これはHTML5対応ブラウザでのみ動作します。 –

関連する問題