如何知道ajax请求的结果是否是json?

时间:2010-11-11 15:02:45

标签: javascript jquery json

我正在使用$ .get执行ajax请求,因此我可以获得一个简单的字符串或JSON,如何知道结果是否是JSON(对象)?

修改

我可以返回一个字符串并以某种方式将其转换为object / JSON吗?

6 个答案:

答案 0 :(得分:5)

它不是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.');
}

答案 1 :(得分:3)

使用typeof方法确定它是对象还是字符串。如果要将String转换为JSON对象,并且如果您信任源,则可以使用eval。否则使用JSON解析器,例如http://www.json.org/json_parse.js

答案 2 :(得分:3)

通常您会想知道数据类型是什么,但如果由于某种原因您不知道,请查看“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 :(得分:2)

您可以使用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/

答案 4 :(得分:0)

你应该知道。每个网址只应返回一种类型的数据。

答案 5 :(得分:0)

您知道数据的来源,您可以进行空检查

喜欢

如果是构造json的字符串,请执行结果的Eval

IF(EmployeeDetails.SalaryDetails.lenght)
{
   forloop()
}