创建呼叫后显示后端错误消息

时间:2018-10-02 23:32:49

标签: error-handling odata sapui5

在我的控制器中,我有以下代码-问题是当它出错时,我想显示从后端传递来的确切错误。但是在我的错误处理功能中,我从未获得任何数据。怎么了?

Controller.js

var token = null;
$.ajax({
    url: sServiceURl,
    type: "GET",
    async: true,
    beforeSend: function(xhr) {
        sap.ui.core.BusyIndicator.show(0);
        xhr.setRequestHeader("X-CSRF-Token", "Fetch");
    },
    complete: function(xhr) {
        token = xhr.getResponseHeader("X-CSRF-Token");
        oContext.OdataModel.create("/materialsSet", oContext.Data, null, oContext.submitSuccess.bind(oContext), oContext.submitError.bind(oContext));
    }
});

submitSuccess: function(data, response, oContext) {
     // works fine 
},
submitError: function(oError) {
   // I never get anything in oError, so the below code is useless.
    try {
        if (oError.responseText) {
            obj = JSON.parse(oError.responseText);
            message = obj.error.message.value;
        } else if (oError.response.body) {
            var errorModel = new sap.ui.model.xml.XMLModel();
            errorModel.setXML(oError.response.body);
            //Read message node
                    if (errorModel.getProperty("/0/message") !== "") {
                        message = errorModel.getProperty("/0/message");
                    } else {
                        message = message1;
                    }
                } else {
                    message = message1;
                }
            } catch (error) {
                message = message1;
            }
            sap.m.MessageToast.show(message);
        },

1 个答案:

答案 0 :(得分:0)

希望这对您有帮助,首先检查后端响应。我将以下代码用于错误处理

submitError: function(responseBody) {
    try {
        var body = JSON.parse(responseBody);
        var errorDetails = body.error.innererror.errordetails;
        if (errorDetails) {
            if (errorDetails.length > 0) {
                for (i = 0; i < errorDetails.length; i++) {
                    console.log(errorDetails[i].message);
                }
            } else
                console.log(body.error.message.value);
        } else
            console.log(body.error.message.value);
    } catch (err) {
        try {
            //the error is in xml format. Technical error by framework
            switch (typeof responseBody) {
                case "string": // XML or simple text
                    if (responseBody.indexOf("<?xml") > -1) {
                        var oXML = jQuery.parseXML(responseBody);
                        var oXMLMsg = oXML.querySelector("message");
                        if (oXMLMsg)
                            console.log(oXMLMsg.textContent);
                    } else
                        console.log(responseBody);

                    break;
                case "object": // Exception
                    console.log(responseBody.toString());
                    break;
            }
        } catch (err) {
            console.log("common error message");
        }
    }
}