1. 程式人生 > >ajax 跨域封裝 JSONP方式 預設還是GET提交請求

ajax 跨域封裝 JSONP方式 預設還是GET提交請求

/**--jquery ajax請求處理外掛類--**/
var WebsiteAjax = {
	
	returnData	:	null,
	
	//獲取一個例項
	getInstance		:	function(settings){
		/**
		 * 預設的200回撥函式(可重寫和繼承)
		 */
		var defaultAjaxSuccessMethod = function(data,status) {
			 alert(data.message);
		     return false;
		};

		var defaultAjaxCallbakErrorMethod = function(data,status) {
			 alert(data.message);
		     return false;
		};
		
		/**
		 * 預設的錯誤回撥函式 (可重寫和繼承) 大部分錯誤處理都可以直接用它
		 * 406 為自定義錯誤 狀態碼 通常會攜帶個自定義的描述字串msg
		 * 比方說,非同步請求後臺判斷了某個引數為空,若為空則返回
		 * 那麼就可以將狀態嗎標註為406,然後弄個msg的key,value
		 */
		var defaultAjaxErrorMethod = function(XMLHttpRequest, textStatus, errorThrown) {
			try{
				var e = jQuery.parseJSON(XMLHttpRequest.responseText);
				alert("提示:["+e.message+"]");
			}catch(e){
				alert("提示:[伺服器出錯]");
			}
			return false;
		};

		/**
		 * 定義預設變數,常量 
		 * ajaxUrl 請求的action路徑,pagerUrl是分頁控制元件本身要訪問的url,可以與ajaxUrl相同
		 * dataParameter 需要傳遞的引數,這裡是個預設的
		 */
		var defaultAjaxVariable = {
			ajaxUrl : "url", 
			dataParameter : null,
			type : "POST",
			dataType : "text",
			async: false,
			succesMethod : defaultAjaxSuccessMethod, //預設200回撥方法名稱
			errorCallMethod : defaultAjaxCallbakErrorMethod, //預設非200jsonp回撥方法名稱
			errorMethod : defaultAjaxErrorMethod //預設非200回撥方法名稱
		};
		
		/**
		 * 執行非同步post ajax請求方法
		 * newsVariable 新的變數或常量
		 * successMethod 回撥函式  返回200時  處理業務的方法名稱
		 * errorMethod   錯誤回撥函式  處理業務的方法名稱
		 */
		var ajaxMethod = function(newsVariable){
			defaultAjaxVariable = jQuery.extend(true,defaultAjaxVariable, newsVariable);
			if(defaultAjaxVariable.dataType == "jsonp" || defaultAjaxVariable.dataType == "JSONP"){
				if(defaultAjaxVariable.dataParameter != null && defaultAjaxVariable.dataParameter != ""){
					if(typeof(defaultAjaxVariable.dataParameter) == "object"){
						var temp = "t=" + Math.random();
						for(var x in defaultAjaxVariable.dataParameter){
							temp += "&" + x + "=" + defaultAjaxVariable.dataParameter[x];
						}
						defaultAjaxVariable.dataParameter = temp;
					}else {
						defaultAjaxVariable.dataParameter += "&t=" + Math.random();
					}
				}else {
					defaultAjaxVariable.dataParameter = "t=" + Math.random();
				}
			}
			$.ajax({
		         url: defaultAjaxVariable.ajaxUrl,
		         type: defaultAjaxVariable.type,
		         async: defaultAjaxVariable.async,
		         data: defaultAjaxVariable.dataParameter,
		         dataType: defaultAjaxVariable.dataType,
		         success: function (data, textStatus) {
					if(defaultAjaxVariable.dataType == "jsonp" || defaultAjaxVariable.dataType == "JSONP"){
						var res = null;
						if(typeof(data) == "object"){
							res = data;
						}else {
							res = jQuery.parseJSON(data);
						}
						
		        		if(res.status == "success"){
		        			defaultAjaxVariable.succesMethod(res,textStatus);
		        		}else {
		        			defaultAjaxVariable.errorCallMethod(res, textStatus);
		        		}
		        	 }else {
		        		 defaultAjaxVariable.succesMethod(data,textStatus);
		        	 }
		         },
		         error: function(XMLHttpRequest, textStatus, errorThrown) {
		        	 defaultAjaxVariable.errorMethod(XMLHttpRequest, textStatus, errorThrown);
		         }
		     }); 
		};
		
		/** 載入時執行 **/
		ajaxMethod(settings);
	}
	
};

website.ajax.js