ajax 跨域封裝 JSONP方式 預設還是GET提交請求
阿新 • • 發佈:2019-01-01
/**--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