2010-12-17 11 views
167

Używam JSON.parse w odpowiedzi, która czasami zawiera odpowiedź 404. W przypadkach, gdy zwraca 404, czy istnieje sposób wychwycić wyjątek, a następnie wykonać inny kod?Właściwy sposób przechwycenia wyjątku od 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 Odpowiedź jest związana z samym 'XMLHttpRequest', a nie' JSON.parse'. Jeśli pokażesz mi sippet kodu, być może będę mógł ci pomóc. –

+0

dane = JSON.parse (odpowiedź, funkcja (klucz, wartość) { var type; if (value && typeof value === 'object') { type = value.type; if (typ typeof === 'string' && okno type [type] === 'function') { return new (window [type]) (value); } } wartość zwracana; – prostock

+0

umieszczam coś w elemencie iframe, a następnie odczytuję zawartość iframe z analizą json ... więc czasami nie jest to ciąg znaków json – prostock

Odpowiedz

256

i dodawać coś do iframe następnie odczytać z powrotem zawartość iframe z json analizowania ... więc czasami nie jest to ciąg json

Spróbuj tego:

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

Jeśli blok try zawiera więcej instrukcji, możesz zidentyfikować wyjątek przez e.name == "SyntaxError", pod warunkiem, że nie mam eval. – user1158559

+0

dzięki za to pracował ja – Darkcoder

3

Możesz spróbować:

var jsonString = "b"; 
 

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

-1

Ta obietnica nie rozwiąże problemu, jeśli argument JSON.parse() nie zostanie przeanalizowany w obiekcie JSON.

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

Ale to nie przechwytuje wyjątku zgłaszanego przez 'JSON.parse' – Abdel

Powiązane problemy