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

向您的选项对象添加一个error方法。$.ajax

于 2013-03-02T18:54:48.037 回答
1

$.ajax 的参数之一是错误。如果页面未返回状态 200,您可以指定要运行的函数。

来自 jquery 文档(http://api.jquery.com/jQuery.ajax/

"error Type: Function( jqXHR jqXHR, String textStatus, String errorThrown ) 请求失败时调用的函数。该函数接收三个参数: jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象,描述类型的字符串发生的错误和可选的异常对象(如果发生)。第二个参数(除了 null)的可能值是“timeout”、“error”、“abort”和“parsererror”。发生 HTTP 错误时,errorThrown 接收HTTP 状态的文本部分,例如“未找到”或“内部服务器错误”。从 jQuery 1.5 开始,错误设置可以接受一个函数数组。每个函数将依次调用。注意:不调用此处理程序用于跨域脚本和 JSONP 请求。这是一个 Ajax 事件。

于 2013-03-02T18:54:50.940 回答
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 回答