2014-11-09 58 views
0

我写一个函数从网站/服务器抓取json文件,并将其与代码保存在本地存储中存在:阿贾克斯 - 检查功能,如果网址之前发送的请求

function donators() { 
    var jsonURL = "http://mywebsite.com/donators.json"; 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", jsonURL, true); 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4) { 
      localDataStore.set("fb_donators", xhr.responseText); 
     } 
    }; 
    xhr.send(); 
} 

上面的代码工作完全没有当JSON文件可以达到,但如果我的服务器出现故障,文件无法达到我的剧本在与xhr.send(线)停止与错误:

GET http://mywebsite.com/donators.json net::ERR_NAME_NOT_RESOLVED 

有没有一种方法,我可以检测在发送请求之前是否可以到达URL,以停止发送请求并允许我的脚本的其余部分继续运行,而不是在xhr.send()停止?

谢谢!

+1

该脚本不应停止。它应该只是有一个你可以检测和处理的错误。而且,不,你不能在没有请求的情况下检查浏览器中是否存在URL,并查看你回来了什么(成功的数据或错误)。 – jfriend00 2014-11-09 01:39:58

+0

啊,谢谢 - 在处理存储在localStorage中的数据时出现另一个错误,因为存储了 – 2014-11-09 01:56:01

回答

3

您可以使用try块。它仍然需要HTTP请求,但它会优雅地失败,并且您可以以任何方式处理错误。

function donators() { 
    var jsonURL = "http://mywebsite.com/donators.json"; 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", jsonURL, true); 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4) { 
      localDataStore.set("fb_donators", xhr.responseText); 
     } 
    }; 
    try { xhr.send(); } catch(err) { 
     alert('Error getting data: ' + err.message); 
    } 
} 
+0

谢谢!我能够使用这个和jfriend00说解决我的问题。 – 2014-11-09 01:57:55