Parece muy inconveniente que el $.getJSON
de jQuery silenciosamente falla 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)?
Respuesta
puede utilizar
function name() {
$.getJSON("", function(d) {
alert("success");
}).done(function(d) {
alert("done");
}).fail(function(d) {
alert("error");
}).always(function(d) {
alert("complete");
});
}
Si quiere ver la causa de la e rror, utilizar 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 no está bien formado su JSON, verá algo así como
getJSON failed, status: parsererror, error: SyntaxError: JSON Parse error: Unrecognized token '/'
Si la dirección es incorrecta, verá algo así como
getJSON failed, status: error, error: Not Found
Si está tratando de obtener JSON desde otro dominio, violando el Same-origin policy, este enfoque devuelve un mensaje vacío. Tenga en cuenta que puede evitar la política de Mismo origen utilizando JSONP (que tiene el limitations) o el método preferido de Intercambio de recursos de origen cruzado (CORS).
Esta debería ser la respuesta aceptada actualmente –
Tenga en cuenta que .error está en desuso - lo mejor es use .fail en su lugar: http://api.jquery.com/jQuery.ajax/ – micapam
¿Por qué usará esto? en lugar de ajax? mientras que esto es una envoltura para el método ajax ¿no? Entonces, básicamente, sería mejor usar Ajax cuando quieras manejar todo este "estado" ... ¿qué piensas? – ncubica
Debería echar un vistazo a los documentos para esta API ... tiene un .error en ella.
+1 Esa sería en realidad una gran solución si no estuviera atascado con jQuery 1.4 ... –
Los métodos de devolución de llamada .success(), .error() y .complete() introducidos en jQuery 1.5 están en desuso a partir de jQuery 1.8. –
Puede utilizar $.ajax
lugar, y establecer las opciones para dataType
"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 en de una manera estricta; cualquier JSON malformado es rechazado y se produce un error de análisis. (para más información sobre el formato correcto JSON Ver json.org.)
+1 Aparentemente '$ .ajax' también capta el error de análisis y envía información al error de retorno de llamada, como lo menciona Håvard. –
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á silenciosamente.
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 llegar comportamiento de falla, puede utilizar $ .ajax así:
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback,
error: another callback
});
+1 la abreviatura '$ .getJSON' era conveniente, pero no lo suficientemente flexible como para ser realmente útil. /suspiro. –
La documentación es clara, pero esto no explica por qué silenciosamente falla. ¿Cuál es el razonamiento detrás de la capa responsable de analizar una Cadena en un Objeto de JavaScript al guardar silencio sobre los errores de forma predeterminada? – semperos
La abreviatura es útil con la nueva sintaxis de promesa '$ .getJSON (...). Error (function() {...})' –
Si está solicitando JSONP como respuesta, obtendrá un error silencioso si no hay respuesta (por ejemplo, interrupción de la red). Vea this thread para más detalles.
- 1. Subversion: Merge, Revert, Merge nuevamente. ¿Por qué falla silenciosamente?
- 2. hg-git push silenciosamente falla
- 3. La autenticación falla silenciosamente en Symfony2
- 4. ¿Por qué $ .getJSON() bloquea el navegador?
- 5. ¿Por qué openssl_pkey_new() falla?
- 6. ¿Por qué GetGenericTypeDefinition falla?
- 7. Instalar git-flow en Ubuntu 10.10 falla silenciosamente
- 8. writeToFile falla - ¿cómo puedo depurar POR QUÉ falla (qué herramientas)?
- 9. ¿Por qué falla Convert.ToBoolean ("0")?
- 10. ¿Por qué adb falla con Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]?
- 11. ¿Por qué falla `gem install rails`?
- 12. ¿Por qué OpenProcessToken falla con ERROR_ACCESS_DENIED
- 13. ¿Por qué recibo una falla de segmentación?
- 14. ¿Por qué este Xaml Path falla Silverlight?
- 15. ¿Por qué falla mi consulta SQL?
- 16. ¿Por qué falla el autoboxing/unboxing aquí?
- 17. ¿Por qué falla eglMakeCurrent con EGL_BAD_ALLOC?
- 18. ¿Por qué este XDocument falla la validación?
- 19. ¿Por qué falla este dynamic_cast de auto_ptr?
- 20. ¿Por qué no falla este elenco genérico?
- 21. ¿Por qué falla System.Net.Mail donde funciona System.Web.Mail
- 22. ¿Por qué falla FOR/F "skip = 0"?
- 23. NSKeyedArchiver falla con CLLocationCoordinate2D structs. ¿Por qué?
- 24. ¿Por qué IsDot() falla en mí? (PHP)
- 25. ¿Por qué mi comparación java time falla?
- 26. ¿Por qué esta comparación de color falla?
- 27. ¿Por qué Collections.shuffle() falla para mi matriz?
- 28. log4net ADO.NET Appender funciona en Dev Fabric, pero falla silenciosamente en Azure
- 29. imagecreatefromjpeg está terminando scripts silenciosamente
- 30. ¿Qué es AudioFlinger y por qué falla TONE_PROP_ACK?
Si bien se proporcionaron las respuestas adecuadas para mi problema, todavía estoy desconcertado de que los desarrolladores programaran la falla silenciosa en '$ .getJSON' ... wtf jQuery chicos? –