Ihr könnt reden...
Aber ihr habt schon wahrgenommen, dass der HTTP Status bei Sepp 200 war? Das war also kein Grund für jQuery, in den error-Handler zu springen.
Er hat aber auch keine Angabe für dataType gemacht. Mit dataType: "json" in den Optionen funktioniert es nämlich, dann springt jQuery in den Error-Handler statt in den Success-Handler (soeben validiert). Und wenn der Error-Handler dann auch noch seinen 3. Parameter protokollieren würde, statt nur "Aua" zu schreien, dann hätte da auch gleich die Fehlermeldung des JSON-Parsers gestanden.
$.ajax ({ type: 'GET',
url: './testdata.json',
dataType: "json",
success: ProcessData,
error: HandleError });
function ProcessData(data) {
// JSON.parse hier nicht mehr nötig
}
function HandleError(xhr, textStatus, errorThrown) {
console.log(`Ajax Error, Status ${xhr.status} (${textStatus}, ${errorThrown})`);
}
In der Konsole wird ausgegeben:
Ajax Error, Status 200 (parsererror, SyntaxError: Unexpected token < in JSON at position 0)
Mit dem plain vanilla fetch API muss man HTTP Fehler übrigens selbst erkennen (bei jQuery erledigt das die Lib), aber der .json() Konverter rejected immerhin sein Promise. Also, so GANZ bequem ist das auch nicht, und ein nackiger XMLHttpRequest ist noch mehr Mühe (sofern man ihn nicht in seinem Framework kapselt).
fetch("./testdata.json")
.then(function(response) {
if (response.ok)
return response.json();
else
throw `Ajax Error, Status ${response.status} ${response.statusText}`;
})
.then(ProcessData)
.catch(HandleError);
Rolf
sumpsi - posui - clusi