JSON文件未正确加载[重复]

Posted

技术标签:

【中文标题】JSON文件未正确加载[重复]【英文标题】:JSON file not loading properly [duplicate] 【发布时间】:2015-11-01 04:17:30 【问题描述】:

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

这是我正在使用的getJson() 函数。我在本地机器上运行它。

var getJSON = function(dir) 

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

    xmlhttp.onreadystatechange = function() 
        console.log(xmlhttp);
    
    xmlhttp.open("GET", dir, true);
    xmlhttp.send();
;

【问题讨论】:

我在这里没有发现问题。您在哪里尝试访问xmlhttp?它拥有数据的唯一位置是在onreadystatechange 回调中。请参阅XHR get json,数据位于var data = JSON.parse(this.responseText); 行下方。 jsfiddle.net/RamiSarieddine/HE2nY/1 【参考方案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) );
    


希望对您有所帮助! - 奥斯卡

【讨论】:

我认为你应该read this。 谢谢 Oscar,这是我想要的,但我收到错误 Origin 'localhost:8080' 因此不允许访问。但是资源不是来自本地主机,我该怎么办?

以上是关于JSON文件未正确加载[重复]的主要内容,如果未能解决你的问题,请参考以下文章

未正确读取 JSON 文件

加载 JSON 文件,错误未定义

文件未从 xml 正确转换为 JSON

网页未正确加载:'"JSON" is undefined' 错误

加载多个 JSON 文件 [重复]

将 Json 文件加载到表时结果不一致 [重复]