我正在尝试使用jquery访问存储在JSON文件中的数据(与小工具位于同一文件夹中)。以下示例在firefox和Internet Explorer中都能正常工作(显示“成功”),但作为小工具,它不起作用(显示“失败”)。
$('#gadgetContent').html("fail");
$.getJSON("test.json", function(data) {
$('#gadgetContent').html("success");
});
关于我做错了什么的任何想法?感谢。
更新:
$.ajax({
url: "test.json",
dataType: 'json',
error: jsonError,
success: jsonSuccess
});
function jsonError(jqXHR, textStatus, errorThrown) {
// As a gadget this function is called
// jqXHR.readyState is 4
// jqXHR.status is 0
// jqXHR.responseText is undefined
}
function jsonSuccess(data) {
// Browsers reach here
}
答案 0 :(得分:5)
您应该像文本一样阅读文件,然后将其转换为json。该实用程序应该可以帮助您:
function getJsonFromFile(fileName) {
var fso = new ActiveXObject("Scripting.FileSystemObject");
if (fso.FileExists(fileName)) {
var f = fso.OpenTextFile(fileName, 1);
var jsonStr = "";
while (!f.AtEndOfStream) {
jsonStr += f.ReadLine();
}
f.Close();
}
return jQuery.parseJSON(jsonStr);
}
请记住以完整路径调用它:
var gadgetPath = System.Gadget.path;
var jsonFile = gadgetPath + "\\" + "foo.json";
var json = getJsonFromFile(jsonFile);
答案 1 :(得分:1)
最简单的方法是简单地将json放在JS文件中并使用脚本标记引用它,因为HTML DOM的那部分由sidebar.exe代码处理,它负责渲染/加载东西
Neeraj
答案 2 :(得分:0)
从原帖的评论中删除,这似乎提供了合适的解决方法。
我怀疑问题是Windows Widget缺少对.json文件类型的支持。作为解决方法,我建议您将JavaScript对象设置为.js文件中的变量,并使用getScript来检索和执行该JavaScript。
执行此操作后,应该可以在全局命名空间中访问该变量。