代码之家  ›  专栏  ›  技术社区  ›  Omu

如何知道Ajax请求的结果是否是JSON?

  •  1
  • Omu  · 技术社区  · 14 年前

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

    编辑:

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

    6 回复  |  直到 14 年前
        1
  •  3
  •   Anders    14 年前

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

        2
  •  5
  •   NilColor    14 年前

    它不是100%,但服务器可能设置responce头: 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
  •  3
  •   Joel    14 年前

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

        4
  •  2
  •   Cubed Eye Qamar Aftab    14 年前

    您可以改用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'
        });
    

    使用数据类型文本,并从中解析JSON。

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

        5
  •  0
  •   dan_waterworth    14 年前

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

        6
  •  0
  •   kobe    14 年前

    你知道数据是怎么来的,你可以对

    喜欢

    如果它是由字符串构造的JSON,则执行结果评估

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