Tengo un comando de recursos MVC de Liferay 7.3 que es algo como esto:
public boolean serveResource( ResourceRequest resourceRequest, ResourceResponse resourceResponse) { try { // my code goes here return false; }catch(Exception e){ return true; } }Llamo a este Comando desde JavaScript con esto:
var req = new XMLHttpRequest(); req.open("POST", '${upload}', true) req.onload = function (event) { console.log("success"); } req.onerror = function (event) { console.log("error"); } // do request req.send(form_data);El problema ahora es que siempre se llama a la función "onload" cuando MVC ResourceCommands devuelve true en la cláusula catch.
Entonces mi pregunta: ¿Cómo puedo saber en JavaScript cuándo mi ResourceCommand fue exitoso o no?
Javadoc no es tan claro sobre el propósito del tipo de retorno booleano. Especialmente porque GenericPortlet.serveResource tiene un tipo de retorno void .
Sin embargo, pensar en lo que puede suceder dentro de su bloque // my code goes here deja más claro qué esperar: el cliente no puede confiar en el resultado booleano para recibir una señal: podría (y normalmente lo hace) acceder a ResourceResponse flujo de salida, envíe todos los datos que desee, y puede estar mucho tiempo en el cliente cuando finalmente return true; de este código. Eso significa que el marco no tiene posibilidad de interceptar o redirigir ninguna comunicación que ya se haya realizado.
Además, un simple valor de retorno verdadero/falso no le da ningún control sobre qué tipo de error se le indica al cliente. ¿Es 401? 404? 418? 500? ¿O devolvería 200 con un mensaje de error HTML? ¿Un error codificado en JSON?
Si confía en el resultado de esta operación: Mantenga el control sobre ella. No puedo decirle para qué es el valor de retorno booleano, pero no es para el beneficio del navegador. Usted decide si usa un código de estado HTTP para su señalización de error o una carga útil específica. Y una vez que implemente eso, sabrá qué esperar del lado de JS.
Recuerde que tendrá que decidir entre "caso correcto" o "caso de error" antes de enviar datos al cliente. Si comenzó a entregar el resultado "ok" al cliente y de repente se encuentra con una excepción, es posible que haya entregado la mitad al cliente, pero no puede confiar en cambiar de caballo, por ejemplo, no puede comenzar de nuevo, enviando un error mensaje ya que la respuesta podría estar ya (la mitad) de camino al navegador.