Подтвердить что ты не робот

Лучший способ узнать, является ли ответ 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'){    
...

есть ли лучший способ?

4b9b3361

Ответ 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;
    }
});