javascript - uso - retornar valor ajax jquery
¿Puedo evaluar el tipo de respuesta de una llamada $.ajax() en la devolución de llamada exitosa? (3)
Estoy usando jQuery para hacer una solicitud de AJAX a un punto final remoto. Ese punto final devolverá un objeto JSON si hay una falla y ese objeto describirá la falla. Si la solicitud es exitosa, devolverá HTML o XML.
Veo cómo definir el tipo de solicitud esperada en jQuery como parte de la llamada $.ajax()
. ¿Hay alguna forma de detectar el tipo de solicitud en el controlador de success
?
$.ajax(
{
type: "DELETE",
url: "/SomeEndpoint",
//dataType: "html",
data:
{
"Param2": param0val,
"Param1": param1val
},
success: function(data) {
//data could be JSON or XML/HTML
},
error: function(res, textStatus, errorThrown) {
alert(''failed... :('');
}
}
);
¿Qué hay de usar la opción complete
?
$.ajax({
...
complete : function(xhr, status) {
// status is either "success" or "error"
// complete is fired after success or error functions
// xhr is the xhr object itself
var header = xhr.getResponseHeader(''Content-Type'');
},
...
});
Haga que la aplicación genere encabezados de tipo de contenido correctos (application / json, text / xml, etc.) y manipúlelos en su exitosa devolución de llamada. Tal vez algo como esto funcionará?
xhr = $.ajax(
{
//SNIP
success: function(data) {
var ct = xhr.getResponseHeader(''Content-Type'');
if (ct == ''application/json'') {
//deserialize as JSON and continue
} else if (ct == ''text/xml'') {
//deserialize as XML and continue
}
},
//SNIP
);
No probado, pero vale la pena intentarlo.
Para cuando llame a su controlador de éxito, los datos ya se han deserializado para usted. Siempre debe devolver el mismo tipo de datos para cualquier resultado exitoso. Si realmente hay un error, probablemente debas lanzar una excepción y dejar que sea manejada por la devolución de llamada por error. Esto debería poder analizar el error resultante y empaquetarlo para su devolución de llamada, es decir, detectará que la respuesta no tuvo el estado 200 OK y analizará el resultado para obtener la información del error.