我有一个Web应用程序,其整个功能依赖于从服务器获取的3个JSON文件,并在加载主页面时进行处理。目前,我使用jQuery AJAX调用,使用'async:false',它工作正常。但是我读到的一切都在向我大喊,同步AJAX是邪恶的,我应该将其重构为异步行为。当然,我可以做到这一点,代价是让代码变得更加混乱,因为整个应用程序将被加载到AJAX成功函数中。
我的问题是我是否应该继续进行重构,因为在我看来这似乎是同步行为的合理案例。是的,如果AJAX调用出现问题,应用程序将无响应,但如果加载其中一个关键JS文件时出现问题,它也会没有响应,比方说,不是吗?并且鉴于应用程序实际上无法使用(无法做任何有价值的事情),无论如何加载JSON文件,这有关系吗?
也许我错过了一个加载JSON文件的简单方法,它根本不涉及使用AJAX?那肯定是一个更清洁的解决方案。
答案 0 :(得分:1)
有用吗?首先,不要修复"什么都不打破。
至于你是否应该使用异步模式,你的这个应用程序是在本地局域网上运行还是在公共互联网上运行?在前一种情况下,可以安全地假设您不太可能遇到带宽问题,因此除了思想问题之外,几乎没有理由转向异步。
然而,如果它在公共互联网上运行,则存在各种与网络相关的问题,并且您无法依赖服务器/客户端连接保持良好的状态。会话。在这种情况下,必须使用具有某种加载/活动屏幕的异步方法,以及在理想连接状态不可用的情况下适当稳健的错误处理/恢复和向下修改为更简单的应用程序版本,如果在所有可能的
答案 1 :(得分:1)
如果文件位于您的服务器中,也许您可以尝试这种方法:
在文件中定义这样的JSON:
data = '[
{"name" : "Ashwin", "age" : "20"},
{"name" : "Abhinandan", "age" : "20"}
]';
然后你只需在你的HTML中包含json文件。
<script type="text/javascript" src="data.json"></script>
<script type="text/javascript" src="javascrip.js"></script>
最后,只需将数据用作变量:
var mydata = JSON.parse(data);
声明: 我刚刚在10分钟前找到了这个here
答案 2 :(得分:0)
我采纳了评论中提到的方法来回应Defesa Esquerdo的建议。它工作得很好,只是一个简单的改变。我有点觉得我在这里提出了自己的问题,但这对我的问题来说是一个很好的解决方案 - 简化代码也可以提高效率。