http://api.jquery.com/jQuery.ajax/
var ajax = $.ajax({
type: "POST",
url: 'script?cmd=open&...',
data: formData,
//nếu dùng formData ví dụ formData = new FormData()/new FormData(form dom element)
//thì phải processData: false nếu không jquery sẽ diễn dịch sai và throw exeception
//có thể append : formData.append(field,value)
crossDomain: false //def:false,
cache: false,
contentType: false, //để server tự quyết định content type nếu muốn tường minh thì = file.type
processData: false, //không process data vì data ở dạng FormData xử lý rồi nếu xử lý tiếp báo lỗi
beforeSend: function ()(jqXHR jqXHR, PlainObject settings) {
//showing loading
$.loadingBox(true);
}
xhr: function () {
// get the native XmlHttpRequest object
var xhr = $.ajaxSettings.xhr();
/*
//init progress bar
$('#progress-bar').show(100).find('.progress-bar').css({width:0+'%'}).html(0+'%').addClass('progress-bar-striped');
html của progress bar :
<div id="upload-profile-pic-progress-bar" class="progress" style="display:none">
<div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
</div>
</div>
//$('#icon-upload-done').hide();
*/
/*
$('#btn-upload-stop').show().click(function(e){
var $this=$(this);
xhr.abort();//kích onabort
});
*/
xhr.upload.onprogress = function (e) {
//var percent = Math.ceil((e.loaded/e.total)*100);
//$('#upload-profile-pic-progress-bar').find('.progress-bar').css({width:percent+'%'}).html(percent+'%');
}
//progress done
xhr.upload.onload = function (e) {};
//progress abort
xhr.upload.onabort = function (e) {};
//phải return xhr nếu không ajax không run
return xhr;
},
success: function (text, textStatus, jqXHR) {
var ret;
try {
ret = JSON.eval(text);
}
//ERROR
catch (e) {
//error
if ($.isEmpty(e))
e.code = 406;
//else parsing json error
ret = {
success: false,
code: e.code,
msg: _t('Invalid JSON Return') + "\r\n<br/>" + text;
};
}
if (ret.success) {
console.log(ret)
//close dlg
$dlg.modal('hide');
} else {}
},
error: function (Xhr, textStatus, errorThrown) {},
});
//đây là các callback cho promise ajax, chú ý các callback này không là param trong
//ajax({}) trong hàm ajax chỉ duy nhất callback success{} và error{}
ajax.done: function () {
console.log("second success callback");
},
.fail(function () {
console.log("fail");
})
.always(function () {
console.log("fail or error");
//showing loading
$.loadingBox(false);
$('#progress-bar').hide();
});