2

アップロードが成功したかどうかを示すデータを送り返すこの ajax アップロード コードがあります。ただし、ファイルにエラーがなく、ファイルが既にアップロードされた後にターゲット パスに移動されたかどうかのみを認識します。アップロードが完了する前に終了した場合、データは返されません。アップロードが予期せず終了した瞬間を検出してページに警告する方法はありますか?

$('#send').click(function() {

 var fileInput = $('#file')[0];
     var data = new FormData();

  for(var i = 0; i < fileInput.files.length; ++i){     
      data.append('file[]',fileInput.files[i]);
   }
     $.ajax({
    type:'POST',
    method:'POST',
    url:'upload.php',
    headers:{'Cache-Control':'no-cache'},
    data:data,
    contentType:false,
    processData:false,
    success: function(response){
        var return_data = response;

        if(return_data !== 'success') {
        $('#status').html('uploaded'); 
        }
        else if(return_data == 'success') {
           $('#status').html('upload failed'); 
        }         
      }
   });
});

そしてupload.phpで:

if($_FILES['file']['error'][$key] == 0
   && move_uploaded_file($_FILES['file']['tmp_name'][$key],"video/test/$name")){
        echo "success";
 }else{
        echo "failed";
4

3 に答える 3

2

options オブジェクトerrorにメソッドを追加します。$.ajax

于 2013-03-02T18:54:48.037 に答える
1
$('#send').click(function() {
   var fileInput = $('#file')[0];
   var data = new FormData();

   for(var i = 0; i < fileInput.files.length; ++i){     
       data.append('file[]',fileInput.files[i]);
   }

   $.ajax({
        type:'POST',
        method:'POST',
        url:'upload.php',
        headers:{'Cache-Control':'no-cache'},
        data:data,
        contentType:false,
        processData:false,

        beforeSend: function(response){
            // before send do some func if u want
        },

        success: function(response){
            var return_data = response;

            if(return_data !== 'success') {
               $('#status').html('uploaded'); 
            } else if(return_data == 'success') {
               $('#status').html('upload failed'); 
            }         
        },

        complete: function(response){
            // do some func after complete if u want
        },

        error: function(response){
            // here is what u want
            alert ("Error: " + response.statusText);
        },

    });
    // end ajax call
});
于 2013-03-02T19:04:25.357 に答える
1

$.ajax のパラメーターの 1 つがエラーです。ページがステータス 200 を返さない場合に実行する関数を指定できます。

jquery ドキュメントから ( http://api.jquery.com/jQuery.ajax/ )

"error Type: Function( jqXHR jqXHR, String textStatus, String errorThrown ) リクエストが失敗した場合に呼び出される関数。関数は次の 3 つの引数を受け取ります。jqXHR (jQuery 1.4.x では、XMLHttpRequest) オブジェクト。発生したエラーと、発生した場合はオプションの例外オブジェクト. 2 番目の引数 (null 以外) の可能な値は、"timeout"、"error"、"abort"、および "parsererror" です. HTTP エラーが発生すると、errorThrown は「Not Found」や「Internal Server Error」などの HTTP ステータスのテキスト部分.jQuery 1.5 の時点で、エラー設定は関数の配列を受け入れることができます.各関数は順番に呼び出されます.注: このハンドラは呼び出されませんクロスドメイン スクリプトおよび JSONP リクエスト用。これは Ajax イベントです。」

于 2013-03-02T18:54:50.940 に答える