使用jquery表单插件上传ajax文件时的错误处理


error handling during ajax file upload using jquery form plugin

在jquery表单插件中的ajax响应中,我遇到了在文件上传过程中捕捉适当错误的想法。

我将通过一些伪代码给出我想要实现的目标。

我的php是:

 $file = strtolower($_FILES["myfile"]["name"]);
 $extension = substr($file, strrpos($file, '.') + 1);
 if($extension == 'jpg'){
  // upload the file
 if(move_uploaded_file($_FILES["myfile"]["tmp_name"], $folder . $finalFilename)){
  // do something here like
 echo "<div id='statusContainer'>
<table><tr><td>
<img src='uploads/".$finalFilename."'>
</td></tr>
<tr><td>".$finalts."</td></tr></table>
</div>";
       }
  } else {
  $error = 1; // will give numbers to different errors like filetype error, size error etc..
  }

现在我的JS代码是:

 (function() {
 var status = $('#status');   
 $('form').ajaxForm({
complete: function(xhr) {
if(xhr.responseText == "// what do i get echoed here so i can run an array and show user appropriate error like size error, type error etc. // "){
     // i want to open a dialog box with correct error message//
} else{
    status.hide().html(xhr.responseText).fadeIn(1000);
    }
  }
   }); 
 })(); 

我应该在ajax响应中得到返回的错误号,并运行一个数组来获得消息吗?但是,我必须在ajax响应中加入许多if条件,并使用不同的错误号。

请谁有一个更合乎逻辑的想法??

您可以创建一个数组,并在其中传递错误json_encode(),然后从ajaxForm解析json响应,比如php部分:

$responseArr = array();
if( file_is_uploaded ) {
  $responseArr["error"] = "0";
  $responseArr["message"] = "File uploaded success message";
}
else {
  $responseArr["error"] = "1";
  $responseArr["message"] = "Error message here";
}
echo json_encode($responseArr); //pass it as response

js部分::

$('form').ajaxForm({
  dataType: "json",
  success: function(response) {
      //parse json response and perform accordingly
      console.log( response );
  }
});

为了减少在JS中遍历数组,并将错误ID与描述匹配,您可以将错误描述本身关联起来,以便在ajax响应中中继吗?这将保持JS的精简,并保持服务器端的错误处理。

示例:

<tr><td>".$finalts."</td></tr></table>
</div>";
}
$error_descriptions = array("Filesize Error", "Extension Error");
} else {
$error = error_descriptions[1]; 
}