在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];
}