2010-12-17 19 views
167

Estoy usando JSON.parse en una respuesta que a veces contiene una respuesta 404. En los casos en que devuelve 404, ¿hay alguna forma de detectar una excepción y luego ejecutar algún otro código?Forma correcta de detectar la excepción de JSON.parse

data = JSON.parse(response, function (key, value) { 
    var type; 
    if (value && typeof value === 'object') { 
     type = value.type; 
     if (typeof type === 'string' && typeof window[type] === 'function') { 
      return new(window[type])(value); 
     } 
    } 
    return value; 
}); 
+3

404 respuesta está relacionada con 'XMLHttpRequest', no' JSON.parse' sí mismo. Si me muestra el código del código, puedo ser capaz de ayudarlo. –

+0

datos = JSON.parse (respuesta, función (clave, valor) { tipo var; if (valor && typeof value === 'object') { type = value.type; if (typeof type === 'cadena' && typeof ventana [tipo] === 'función') {return new (ventana [tipo]) (valor); }} valor de retorno; – prostock

+0

puedo enviar algo en un iframe a continuación, vuelve a leer el contenido del iframe con json parse ... por lo que a veces no es una cadena json – prostock

Respuesta

256

puedo enviar algo en un iframe posteriormente ser leído el contenido del iframe con JSON analizar ... así que a veces no es una cadena JSON

Prueba esto:

if(response) { 
    try { 
     a = JSON.parse(response); 
    } catch(e) { 
     alert(e); // error in the above string (in this case, yes)! 
    } 
} 
+6

Si el bloque try contiene más declaraciones, puede identificar la excepción por e.name == "SyntaxError", siempre que no tiene una evaluación. – user1158559

+0

gracias funcionó para me – Darkcoder

3

Puede intentar esto:

var jsonString = "b"; 
 

 
try { 
 
    a = JSON.parse(jsonString); 
 
} catch (e) { 
 
    alert(e); // You get an error. 
 
}

-1

Esta promesa no resolverá si el argumento de JSON.parse() no se puede analizar en un objeto JSON.

Promise.resolve(JSON.parse('{"key":"value"}')).then(json => { 
    console.log(json); 
}).catch(err => { 
    console.log(err); 
}); 
+2

Pero esto no capta la excepción lanzada por 'JSON.parse' – Abdel

Cuestiones relacionadas