JSON文件未正确加载

时间:2015-08-08 23:03:00

标签: javascript php json

我想阅读this JSON file,但xmlhttp返回空。

这是我正在使用的std::string rules[numAnts]; 函数。我是在本地机器上运行的。

getJson()

1 个答案:

答案 0 :(得分:1)

阿尔贝托,

由于您正在异步使用xmlHttp,并且假设您希望将响应保存在变量中,因此您必须修改getJSON函数以接受回调函数并将结果和/或错误传递给回调。所以getJSON应该是这样的:

var getJSON = function(dir, callback) {

    console.log(dir);
    var xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange=function() {     
        if (xmlhttp.readyState==4) {
            if (xmlhttp.status == 200) {
                console.log('request finished', xmlhttp);
                // pass the response to the callback function
                callback(null, xmlhttp.responseText);

            } else {
                // pass the error to the callback function
                callback(xmlhttp.statusText);
            }
        }
    }

    xmlhttp.open("GET", dir, true);
    xmlhttp.send();
}

要使用此功能,您需要以下内容:

var myReturnedJSON;

getJSON("http://gomashup.com/json.php?fds=geo/usa/zipcode/state/AL&jsoncallback=", function(error, data){
    if(error) {
        //handle the error
    } else {
        //no error, parse the data
        myReturnedJSON = JSON.parse(data) 
    }

});

现在,问题是源返回无效的JSON:

({
    "result":[
    {
        "Longitude" : "-086.466833",
        "Zipcode" : "35004",
        "ZipClass" : "STANDARD",
        "County" : "SAINT CLAIR",
        "City" : "MOODY",
        "State" : "AL",
        "Latitude" : "+33.603543"
    }
]}
)

为了使其有效,它应该如下:

{
    "result":[
    {
        "Longitude" : "-086.466833",
        "Zipcode" : "35004",
        "ZipClass" : "STANDARD",
        "County" : "SAINT CLAIR",
        "City" : "MOODY",
        "State" : "AL",
        "Latitude" : "+33.603543"
    }
]}

不同之处在于有效的JSON没有包含在括号中。

因此,让我们修改回调函数以去掉响应的第一个和最后一个字符:

function(error, data){
    if(error) {
        //handle the error
    } else {
        //no error, parse the data
        myReturnedJSON = JSON.parse( data.substr(1, data.length - 2) );
    }

}

我希望有所帮助! - 奥斯卡