Лучший способ узнать, является ли ответ json во время ajaxSuccess
в моей функции $.ajaxSucess() мне нужно выяснить, является ли ответ json. в настоящее время я делаю это:
$('body').ajaxSuccess(function(evt, xhr, settings) {
var contType = xhr.getAllResponseHeaders().match(/Content-Type: *([^)]+);/);
if(contType && contType.length == 2 && contType[1].toLowerCase() == 'application/json'){
...
есть ли лучший способ?
Ответы
Ответ 1
Предполагая, что вы ожидаете json, я просто попытаюсь разобрать его как json и поймать любые ошибки. Также см. jQuery.parseJSON.
try {
jQuery.parseJSON(response);
} catch(error) {
// its not json
}
Если вы ожидаете одного из нескольких разных типов ответов (например, это может быть json или это может быть просто текст и т.д.), вам может потребоваться усложнить ситуацию. Я бы использовал xhr.getResponseHeader( "content-type" ). См. это сообщение в блоге для получения подробной информации по обработке типов контента.
$.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
}
}
});
Ответ 2
Я всегда находил, что все работает нормально:
if (xhr.getResponseHeader('Content-Type') !== 'application/json') {
// Something other than JSON was returned
}
Вы столкнулись с ситуацией, которая требовала дополнительной логики в вашем сообщении?
Ответ 3
var a={"k":"v"};
var b="k";
try{
$.parseJSON(b);
}catch(e){alert('Not JSON')}
Ответ 4
Возможно, вы можете использовать jQuery.parseJSON, чтобы попытаться разобрать его. Если возникает исключение, оно недействительно json.
http://api.jquery.com/jQuery.parseJSON/
Ответ 5
Если вы ожидаете ответ ajax формы данных, вы можете обработать его с помощью следующего вызова 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;
}
});