Как узнать, является ли результат запроса AJAX JSON? - PullRequest
1 голос
/ 11 ноября 2010

Я делаю ajax-запрос, используя $ .get, и в результате я могу получить простую строку или JSON, как узнать, является ли результат JSON (объект) или нет?

РЕДАКТИРОВАТЬ:

можно ли вернуть строку и каким-то образом преобразовать ее в объект / JSON?

Ответы [ 6 ]

5 голосов
/ 11 ноября 2010

Это не 100%, но сервер, вероятно, установил ответный заголовок: Content-Type: application/json. Таким образом, вы можете попробовать проверить это:

$.ajax({
  url: 'url',
  success: function(data, textStatus, xhr){
    var spoiler = xhr.getResponseHeader('Content-Type');
    spoiler == 'application/json' ? alert('JSON received') : alert('Not JSON received');
  }
});

Конечно, это работает, только если ваш сервер правильно устанавливает свои заголовки.

Еще один способ - попытаться создать функцию и перехватить возможные ошибки.

try {
  x = ( new Function('return ' + received_data) )();
}
catch (e) { 
  console.log('Its not a JSON data... or its invalid.');
}
3 голосов
/ 11 ноября 2010

Обычно вы ожидаете, что знаете тип данных, но если по какой-то причине вы не знаете, как насчет проверки заголовка Content-Type. Теоретически это должно быть «application / json»:

function responseHandler() {
    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
            if(http_request.getResponseHeader("Content-Type") == 'application/json') {
                // JSON
            }
            else {
                // Not JSON
            }
        }
    }
}

Конечно, вам нужно будет убедиться, что сервер правильно устанавливает заголовок Content-Type. Кроме того, не уверен, что это будет работать в IE - вероятно, нет.

3 голосов
/ 11 ноября 2010

Используйте метод typeof, чтобы определить, является ли он объектом или строкой.Если вы хотите преобразовать String в объект JSON и доверяете источнику, вы можете использовать eval.В противном случае используйте анализатор JSON, например http://www.json.org/json_parse.js

2 голосов
/ 11 ноября 2010

Вы можете использовать getJSON () вместо

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

Для редактирования:

Вы можете использовать

$.ajax({
        type: 'get',
        cache: false,
        url: service,
        error:  function(XMLHttpRequest, textStatus, errorThrown){
            failureFunction(XMLHttpRequest, textStatus, errorThrown);
        },
        success:    function(data){
            successFunction(data);
        },
        dataType: 'text'
    });

С dataType Text и оттуда разбирать JSON.

jQuery.parseJSON (json) - http://api.jquery.com/jQuery.parseJSON/

0 голосов
/ 11 ноября 2010

Вы знаете, как поступают данные, и вы можете сделать нулевую проверку для

Как

если это строка, построенная json, сделайте Eval результата

IF(EmployeeDetails.SalaryDetails.lenght)
{
   forloop()
}
0 голосов
/ 11 ноября 2010

Ты должен знать. Каждый URL должен возвращать только один тип данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...