8detect
11/24/2017 - 6:55 PM

$.ajax general

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();
	});