$.ajax dataType設置爲json 回調函數不執行

請求方式以下:javascript

$.xpost = function (url, data) {
    return $.ajax({
        url: url,
        type: "POST",
        dataType: "json",
        contentType: "application/json",
        data: JSON.stringify(data)
    });
};

在service中調用請求css

class Service {
       
        //保存訂單
        saveOrder(order){
            let url = config.rootUrl +'/order/main/saves';
            return $.xpost(url, JSON.stringify(order));
        }

 }

let service = new Service();

在view中調用service裏面的savaOrder方法html

            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裏面的回調方法。java

查詢jQuery api,看到裏面的解釋:python

dataType (default: Intelligent Guess (xml, json, script, or html))ajax

Type:  String
從服務器返回你指望的數據類型。 若是沒有指定,jQuery將嘗試經過MIME類型的響應信息來智能判斷(一個XML MIME類型就被識別爲XML,在1.4中 JSON將生成一個JavaScript對象,在1.4中 script 將執行該腳本,其餘任何類型會返回一個字符串)。 可用的類型(以及結果做爲第一個參數傳遞給成功回調函數)有:
  • "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鍵值對。再一試,發現能夠進入回調函數了。json

 

Data Types(數據類型)

$.ajax()調用不一樣類型的響應,被傳遞到成功處理函數以前,會通過不一樣種類的預處理。 預處理的類型取決於由更加接近默認的Content-Type響應,但能夠明確使用dataType選項進行設置。若是提供了dataType選項, 響應的Content-Type頭信息將被忽略。api

有效的數據類型是text, html, xml, jsonjsonp,和 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直接表示無限也是不容許的).

上面提到返回是一個字符串時會致使拋出異常,奇怪的是我調試的時候並無拋出異常。

相關文章
相關標籤/搜索