Error Handling
Error handling is an important part in application development. Sircl provides extension points to add your own logic to handle errors with Javascript.
Introduction
By default, errors are "ignored": no error message or dialog is shown. It is up to you, website or app developer, to determine what action to take on error.
General error handlers
A general error handler is an error handler called to handle a "general error". This can be due to a programming error but also due to a failed request.
A general error handler is a Javascript function installed with the sircl.addErrorHandler
function:
<script>
sircl.addErrorHandler(function (code, message, data) {
alert("Error " + code + " has occured: " + message);
});
</script>
Following errors can be trapped by a general error handler:
Code | Message | Parameters | Library |
S121 | Error executing a BeforeUnLoad handler: ... | { exception, fx } | core |
S122 | Error executing an AfterLoad content handler: ... | { exception, fx } | core |
S123 | Error executing an AfterLoad enrich handler: ... | { exception, fx } | core |
S124 | Error executing an AfterLoad process handler: ... | { exception, fx } | core |
S125 | Error executing an AfterLoad after handler: ... | { exception, fx } | core |
S130 | Error executing an After history handler. | { exception, fx } | core |
S131 | Error executing a RequestProcessor step: ... | { exception, fx, request } | core |
S132 | Missing data on event for processing event request. | { event } | core |
S133 | Data on event to process is incomplete, missing: ... | { event } | core |
S134 | Error processing event as request: ... | { exception, event } | core |
S141 | Too many redirects. | { request } | core |
S151 | Error evaluating class action value "..." : ... | { exception, element } | core |
S161 | Error executing a Page Navigate handler. | { exception, fx } | core |
S162 | Error executing a Page Navigate cancellation handler. | { exception, fx } | core |
S311 | Change action request failed. | { request } | changeactions |
The data is an object with properties request, exception, fx (function) and/or element as stated in the above table.
See the section about Extensibility for more information about BeforeUnload and AfterLoad handlers and RequestProcessor steps.
Errors loading page parts
Partial page loads are processed by "processing pipeline" where custom handlers can be injected. This is part of how Sircl is made extensible.
When an error occures requesting a page part (a HTTP statuscode >= 300 is returned), error handlers get injected in the processing pipeline. A processing pipeline error handler is a Javascript function registered using the sircl.addRequestHandler for the phase "onError". For instance:
<script>
sircl.addRequestHandler("onError", function (req) {
if (req.method === "get") {
// Re-issue the request by the browser, to render the error page:
window.location.href = req.action
} else {
// If no get request, we can not re-issue, then inform user:
alert("An error has occured.");
}
// Process next handler:
this.next(req);
});
</script>
As all processing pipeline handlers (see more about them in the section about Extensibility), the handler function gets a request as parameter and must pass this on to the next handler using the this.next(req)
method.
In the above error handler, if the request was a "get" request, it will be re-issued, but by the browser this time, ensuring a full page is requested and returned. The returned page is expected to provide information about the error.
If the request was not a "get" request (but for instance a "post" request), it cannot simply be replayed and a simple alert is shown instead. In practice, you could show an HTML 5 dialog or a Bootstrap modal window with a friendly error message and maybe even the opportunity for the user to report the error.
In Single Page mode, where a main target is defined, you could replace the content of the main target instead of performing a full page load.
The processing pipeline error handler could decide to cancel the error by calling
req.succeeded = true;
For instance, because the handler managed to retrieve a cached version of the requested page part and it should therefore not be considered in failed state anymore.