/ / Ideale Möglichkeit, um herauszufinden, ob die Antwort JSON ist, während ajaxSuccess - Javascript, jquery, ajax

Idealer Weg, um herauszufinden, ob die Antwort JSON während ajaxSuccess ist - javascript, jquery, ajax

In meiner $ .ajaxSucess () - Funktion muss ich herausfinden, ob die Antwort json ist. Zur Zeit mache ich das:

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

Gibt es einen besseren Weg?

Antworten:

25 für die Antwort № 1

Angenommen, Sie erwarten JSON, dann würde ich einfach versuchen, es wie JSON zu analysieren und Fehler abzufangen. Siehe auch jQuery.parseJSON.

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

Wenn Sie eine von mehreren verschiedenen erwartenAntworttypen (d. h. es kann sich um JSON oder nur um Text usw. handeln), müssen Sie möglicherweise komplizierter werden. Ich würde xhr.getResponseHeader ("content-type") verwenden dieser Blogbeitrag Hier finden Sie ausführliche Informationen zum Umgang mit Inhaltstypen.

$.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 für die Antwort № 2

Ich habe immer festgestellt, dass Folgendes gut funktioniert:

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

Sind Sie auf eine Situation gestoßen, die die zusätzliche Logik in Ihrem Beitrag erforderte?


1 für die Antwort № 3
var a={"k":"v"};
var b="k";

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

0 für die Antwort № 4

Sie könnten wahrscheinlich jQuery.parseJSON verwenden, um zu versuchen, es zu analysieren. Wenn eine Ausnahme ausgelöst wird, ist sie nicht gültig.

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


0 für die Antwort № 5

Wenn Sie die Daten für die Ajax-Antwort erwarten, können Sie sie mit dem folgenden Ajax-Aufruf verarbeiten:

$.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;
}
});