Parece muy inconveniente que $.getJSON de jQuery falle silenciosamente cuando los datos devueltos no son JSON válidos. ¿Por qué se implementó esto con una falla silenciosa? ¿Cuál es la forma más fácil de realizar getJSON con un mejor comportamiento de falla (por ejemplo, lanzar una excepción, console.log() , o lo que sea)?
puedes usar
function name() { $.getJSON("", function(d) { alert("success"); }).done(function(d) { alert("done"); }).fail(function(d) { alert("error"); }).always(function(d) { alert("complete"); }); }Si desea ver la causa del error, utilice la versión completa
function name() { $.getJSON("", function(d) { alert("success"); }).fail( function(d, textStatus, error) { console.error("getJSON failed, status: " + textStatus + ", error: "+error) }); }Si su JSON no está bien formado, verá algo como
getJSON failed, status: parsererror, error: SyntaxError: JSON Parse error: Unrecognized token '/'Si la URL es incorrecta, verá algo como
getJSON failed, status: error, error: Not FoundSi está intentando obtener JSON de otro dominio, violando la política del mismo origen , este enfoque devuelve un mensaje vacío. Tenga en cuenta que puede evitar la política del mismo origen utilizando JSONP (que tiene sus limitaciones ) o el método preferido de Intercambio de recursos de origen cruzado ( CORS ).
Directamente de la documentación:
Importante: a partir de jQuery 1.4, si el archivo JSON contiene un error de sintaxis, la solicitud generalmente fallará en silencio.
Como dice la página de documentación, getJSON es simplemente un método abreviado para
$.ajax({ url: url, dataType: 'json', data: data, success: callback });Para obtener un comportamiento de falla, puede usar $.ajax así:
$.ajax({ url: url, dataType: 'json', data: data, success: callback, error: another callback });Puede usar $.ajax en su lugar y establecer las dataType de tipo de datos en "json". De la documentación:
"json": evalúa la respuesta como JSON y devuelve un objeto JavaScript. En jQuery 1.4, los datos JSON se analizan de manera estricta; cualquier JSON con formato incorrecto se rechaza y se genera un error de análisis . (Consulte json.org para obtener más información sobre el formato JSON adecuado).