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

Javascript 如何知道ajax请求的结果是否为json?,javascript,jquery,json,Javascript,Jquery,Json,我正在使用$.get执行一个ajax请求,因此我可以得到一个简单的字符串或JSON,如何知道结果是否为JSON(对象) 编辑: 我可以返回一个字符串并以某种方式将其转换为object/JSON吗?您应该知道。每个url应该只返回一种类型的数据。您应该知道。每个url应该只返回一种类型的数据。您可以使用getJSON()代替 对于编辑: 你可以用 $.ajax({ type: 'get', cache: false, url: service,

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

编辑:


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

您应该知道。每个url应该只返回一种类型的数据。

您应该知道。每个url应该只返回一种类型的数据。

您可以使用getJSON()代替

对于编辑:

你可以用

$.ajax({
        type: 'get',
        cache: false,
        url: service,
        error:  function(XMLHttpRequest, textStatus, errorThrown){
            failureFunction(XMLHttpRequest, textStatus, errorThrown);
        },
        success:    function(data){
            successFunction(data);
        },
        dataType: 'text'
    });
使用数据类型文本,并从中解析JSON

parseJSON(json)

您可以改用getJSON()

对于编辑:

你可以用

$.ajax({
        type: 'get',
        cache: false,
        url: service,
        error:  function(XMLHttpRequest, textStatus, errorThrown){
            failureFunction(XMLHttpRequest, textStatus, errorThrown);
        },
        success:    function(data){
            successFunction(data);
        },
        dataType: 'text'
    });
使用数据类型文本,并从中解析JSON


parseJSON(json)

您知道数据是如何来的,可以对

如果是字符串构造的json,请对结果进行评估

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

您知道数据是如何来的,可以对

如果是字符串构造的json,请对结果进行评估

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

使用
typeof
方法确定它是对象还是字符串。如果要将字符串转换为JSON对象,并且如果信任源,则可以使用
eval
。否则,使用JSON解析器,例如使用
typeof
方法确定它是对象还是字符串。如果要将字符串转换为JSON对象,并且如果信任源,则可以使用
eval
。否则,请使用JSON解析器,例如它不是100%,但服务器可能会设置response头:
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.');
}

它不是100%,但服务器可能设置了response头:
内容类型: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.');
}

通常,您希望知道数据类型是什么,但是如果出于某种原因您不知道,那么检查“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
            }
        }
    }
}

当然,您必须检查服务器是否正确设置了内容类型头。另外,不确定这是否在IE中起作用-可能不起作用。

通常您希望知道数据类型是什么,但如果出于某种原因您不知道,那么检查“内容类型”标题如何。理论上应该是“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
            }
        }
    }
}

当然,您必须检查服务器是否正确设置了内容类型头。另外,不确定这在IE中是否可行-可能不行。

这实际上是一个数据契约问题,而不是其他任何问题。从$.get调用返回的数据应该是可靠的。@Patrick dw不太可靠,当我执行result.substr()并且结果是json结果时,我得到一个错误,即substr不是一个函数(所以它是一个对象)。这实际上是一个数据契约问题,而不是其他任何问题。从$.get调用返回的数据应该是可靠的。@Patrick dw不太可靠,当我执行result.substr()时,结果是一个json结果,我得到的错误是substr不是一个函数(所以它是一个对象),你甚至可以在firebug中检查结果,最新的firebug在netpanel中有一个json选项卡,如果它是真的json对象,它表明structuremy请求可以返回一个简单的html内容,或者jsonmy请求可以返回一个简单的html内容或json+1,因为这是真的。URL不应“随机”返回数据格式。因为,例如,在本例中,如何区分恰好包含JSON的字符串和JSON对象之间的差异?typeof(字符串)将是字符串,1差+1,因为这是真的。URL不应“随机”返回数据格式。例如,在这种情况下,如何区分恰好包含JSON的字符串和JSON对象之间的差异?typeof(字符串)将是string,1 differencetypeof(结果)=“object”did ittypeof(结果)=='object'这样做了这可能是处理内容协商最符合标准的方式。这可能是处理内容协商最符合标准的方式。