請求方式如下:
$.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
直接表示無限也是不允許的).
上面提到返回是一個字符串時會導致拋出異常,奇怪的是我調試的時候並沒有拋出異常。