如何检查我的响应是字符串还是JSON对象?

时间:2016-11-23 20:49:40

标签: javascript jquery json

我希望我的回复是在JSON对象中。但在某些函数中,它来自字符串,我想解析它。我怎样才能做到这一点?这是我的功能。

/flask2/video_feed

这是我的responseText

function serverRequest(requestDATA, successCallback, errorCallback, hideIndicator, showAlert){
    var METHOD = "POST";
    var serverURL = 'http://istudy.com.pk/api/server.php'; //Path to Server.php
    //var serverURL = 'http://localhost/istudy/server.php'; //Path to Server.php
    var DATA_TYPE = 'json';
    var TIMEOUT = 20000;
    console.log(requestDATA);
    $$.ajax({
        url: serverURL,
        data: requestDATA,
        dataType: DATA_TYPE,
        type: METHOD,
        timeout: TIMEOUT,
        success: function(data){
            successCallback(data, hideIndicator, showAlert);
        },
        error: function(a, b, c){
            errorCallback(a, b, c, hideIndicator, showAlert);
        }
    }); 
}

这是我的PHP功能

responseText: "{"status":"success","message":"Your Order has Processed. Please Note this pin <b style=\"background-color:green;\">osIyKvAp<\/b> and send it to the admin with payment details."}"

当且仅当我的回复是字符串时,我可以对JSON.parse进行任何检查吗?

4 个答案:

答案 0 :(得分:2)

在成功处理程序中添加此内容。

data = typeof data === 'string' ? data : JSON.parse(data);

答案 1 :(得分:0)

您可以使用相当简单的javascript来执行此操作:

if (typeof(data) == 'string') {
    data = JSON.parse(data);
}

如果您对为什么感到好奇,它可能无法自动解析您的JSON,这里有几个常见原因:

  • 无效的JSON(请与jsonlint.com联系)
  • 在期待JSON时没有获得application/json内容类型(在dataType参数中设置。

另请参阅:jQuery won't parse my JSON from AJAX query

答案 2 :(得分:0)

&#34;当且仅当我的回复是字符串时,我可以对JSON.parse进行任何检查吗?&#34; 是的你可以。

if (typeof (response) != 'object'){
response = JSON.parse(response);
}

答案 3 :(得分:0)

删除DATA_TYPE = 'json';,然后重试:

function serverRequest(requestDATA, successCallback, errorCallback, hideIndicator, showAlert){
    var METHOD = "POST";
    var serverURL = 'http://istudy.com.pk/api/server.php'; //Path to Server.php
    //var serverURL = 'http://localhost/istudy/server.php'; //Path to Server.php
    var TIMEOUT = 20000;
    console.log(requestDATA);
    $$.ajax({
        url: serverURL,
        data: requestDATA,
        type: METHOD,
        timeout: TIMEOUT,
        success: function(data){
            try {
               if(typeof(data)==='string') data=JSON.parse(data);
            } catch(ex) { // bad json response
               console.error(ex);
            }
            successCallback(data, hideIndicator, showAlert);
        },
        error: function(a, b, c){
            errorCallback(a, b, c, hideIndicator, showAlert);
        }
    }); 
}

请注意。这不会避免这个问题,但是让我们解析响应,同时从服务器得到可能的错误响应,即Content-Type不是application/json。某些Web服务器将同时接受Content-Type:text/plainContent-Type:application/json;标头,而在两种情况下都返回{$ 1}}而不是{$ 1}} $ .ajax解析(当找到{{1}时}作为json formatted string标题值)。

要实现这一点,请务必在json object代码中打印出正确的标题

application/json