請求方式如下:
$.xpost = function (url, data) {
return $.ajax({
url: url,
type: "POST",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(data)
});
};
在service中調用請求
class Service {
//保存訂單
saveOrder(order){
let url = config.rootUrl +'/order/main/saves';
return $.xpost(url, JSON.stringify(order));
}
}
let service = new Service();
在view中調用service里面的savaOrder方法
service.saveOrder(order).then((result)=>{
if(result.status == 1){
$("#cashPayBox").modal('hide');
if(order.status == 12){
//支付完成,當前單據完結
//流水號遞增1
this.baseInfo.serialNo += 1;
$(".cashier").databind(this.baseInfo);
//清空面板關於掛起訂單的信息
this.page.clearOrderInfo();
this.page.order = {};
this.page.item = {};
}else{
service.getOrder(orderNo).then((orderInfo)=>{
$.tryInvoke(this.setCurrentOrder,this,orderInfo);
//更新支付金額區域顯示金額
this.changePayAmount(0.00,amount,payway)
});
}
}else{
}
});
向服務器發送請求,請求正確返回,狀態是200,沒看到報錯。但是就是不執行后面then里面的回調方法。
查詢jQuery api,看到里面的解釋:
dataType (default: Intelligent Guess (xml, json, script, or html))
"xml": 返回 XML 文檔,可以通過 jQuery 處理。"html": 返回純文本 HTML 文本;包含的script標簽會在插入DOM時執行。"script": 把響應的結果當作 JavaScript 執行,並將其當作純文本返回。默認情況下會通過在URL中附加查詢字符串變量 ,_=[TIMESTAMP], 禁用緩存結果,除非設置了cache參數為true。注意: 在遠程請求時(不在同一個域下),所有POST請求都將轉為GET請求。(愚人碼頭注:因為將使用DOM的script標簽來加載)"json":把響應的結果當作 JSON 執行,並返回一個JavaScript對象。跨域"json"請求轉換為"jsonp",除非該請求在其請求選項中設置了jsonp:false。JSON 數據以嚴格的方式解析; 任何畸形的JSON將被拒絕,並且拋出解析錯誤信息。在jQuery1.9中,一個空響應也將被拒絕;服務器應該返回null或{}響應代替。(見json.org的更多信息,正確的JSON格式。)"jsonp": 以 JSONP 的方式載入 JSON 數據塊。會自動在所請求的URL最后添加"?callback=?"。默認情況下會通過在URL中附加查詢字符串變量 ,_=[TIMESTAMP], 禁用緩存結果,除非設置了cache參數為true。"text": 返回純文本字符串。
我的ajax請求里面的dataType設置的是json,查看后台返回的是一個String,估計問題應該出在這里。把后台返回改成了Map鍵值對。再一試,發現可以進入回調函數了。
Data Types(數據類型)
$.ajax()調用不同類型的響應,被傳遞到成功處理函數之前,會經過不同種類的預處理。 預處理的類型取決於由更加接近默認的Content-Type響應,但可以明確使用dataType選項進行設置。如果提供了dataType選項, 響應的Content-Type頭信息將被忽略。
有效的數據類型是text, html, xml, json,jsonp,和 script.
如果指定的是text 或 html, 則不會預處理。 這些數據被簡單地傳遞給成功處理函數, 並通過該jqXHR對象的responseText屬性獲得的。
如果指定的是xml, 響應結果作為XMLDocument,在傳遞給成功處理函數之前使用jQuery.parseXML進行解析。 XML文檔是可以通過該jqXHR對象的responseXML屬性獲得的。
如果指定的是json,響應結果作為一個對象,在傳遞給成功處理函數之前使用jQuery.parseJSON進行解析。 解析后的JSON對象可以通過該jqXHR對象的responseJSON屬性獲得的。
查看jQuery.parseJSON( json )的解釋:
傳入格式有誤的 JSON 字符串可能導致拋出異常。例如,下面這些無效的 JSON 字符串:
{test: 1}(test 沒有使用雙引號包裹).{'test': 1}('test' 用了單引號而不是雙引號包裹).
"{test: 1}"(test 沒有使用雙引號包裹)."{'test': 1}"('test' 用了單引號而不是雙引號包裹)."'test'"('test' 用單引號代替雙引號).".1"(number 必須以數字開頭;"0.1"將是有效的)."undefined"(undefined不能表示一個 JSON 字符串; 然而null,可以)."NaN"(NaN不能表示一個 JSON 字符串; 用Infinity直接表示無限也是不允許的).
上面提到返回是一個字符串時會導致拋出異常,奇怪的是我調試的時候並沒有拋出異常。
