/ / Idealny sposób, aby dowiedzieć się, czy odpowiedź jest JSON podczas ajaxSuccess - javascript, jquery, ajax

Idealny sposób, aby dowiedzieć się, czy odpowiedź jest JSON podczas ajaxSuccess - javascript, jquery, ajax

W mojej funkcji $ .ajaxSucess () muszę się dowiedzieć, czy odpowiedź jest json. Obecnie robię to:

$("body").ajaxSuccess(function(evt, xhr, settings) {
var contType = xhr.getAllResponseHeaders().match(/Content-Type: *([^)]+);/);
if(contType && contType.length == 2 && contType[1].toLowerCase() == "application/json"){
...

Czy istnieje lepszy sposób?

Odpowiedzi:

25 dla odpowiedzi № 1

Zakładając, że spodziewasz się json, spróbuję po prostu sparsować to jak json i wykryć błędy. jQuery.parseJSON.

try {
jQuery.parseJSON(response);
} catch(error) {
// its not json
}

Jeśli oczekujesz jednego z wielu różnychtypy odpowiedzi (tzn. może to być json lub może to być po prostu tekst, itp.), wtedy może być konieczne zwiększenie komplikacji. Używam xhr.getResponseHeader ("typ zawartości") ten wpis na blogu dla niektórych szczegółów dotyczących obsługi typów zawartości.

$.ajax({
type: "POST",
url: "/widgets",
data: widgetForm.serialize(),
success: function(response, status, xhr){
var ct = xhr.getResponseHeader("content-type") || "";

if (ct.indexOf(‘html’) > -1) {
widgetForm.replaceWith(response);
}

if (ct.indexOf(‘json’) > -1) {
// handle json here
}
}
});

7 dla odpowiedzi nr 2

Zawsze udawało mi się, że działa to dobrze:

  if (xhr.getResponseHeader("Content-Type") !== "application/json") {
// Something other than JSON was returned
}

Czy napotkasz sytuację wymagającą dodatkowej logiki w swoim poście?


1 dla odpowiedzi nr 3
var a={"k":"v"};
var b="k";

try{
$.parseJSON(b);
}catch(e){alert("Not JSON")}

0 dla odpowiedzi nr 4

Prawdopodobnie możesz użyć jQuery.parseJSON, aby spróbować parsować. Jeśli zgłoszony zostanie wyjątek, to nie jest on prawidłowy.

http://api.jquery.com/jQuery.parseJSON/


0 dla odpowiedzi № 5

Jeśli oczekujesz danych z odpowiedzi ajax, możesz obsłużyć go za pomocą wywołania ajax:

$.ajax({
dataType: "json", //dataType is important
type: "post",
url: orifinalurl,
data: reqParam,
}).done(function(data){
//response is valid json data.
}).error(function(jqxhr, exception){
if (jqxhr.status === 0) {
msg="Can not connect to server. Please check your network connection";
} else if (jqxhr.status == 404) {
msg="Requested page not found. <b>Error -404</b>";
} else if (jqxhr.status == 500) {
msg="Internal Server Error <b>Error -500</b>].";
} else if (exception === "parsererror") {
msg="Requested JSON parse failed.";
} else if (exception === "timeout") {
msg="Request Time out error.";
} else if (exception === "abort") {
msg="Request aborted.";
} else {
msg="Uncaught Error.n" + jqxhr.responseText;
}
});