在 Windows 小工具中从 JSON 文件检索数据时出现问题

发布于 2024-11-15 06:43:34 字数 693 浏览 2 评论 0原文

我正在尝试使用 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
}

I am trying to access data stored in a JSON file (in the same folder as the gadget) using jquery. The following example works fine in both firefox and internet explorer (shows "success"), but as a gadget it doesn't work (shows "fail").

$('#gadgetContent').html("fail");

$.getJSON("test.json", function(data) {

    $('#gadgetContent').html("success");
});

Any ideas as to what I'm doing wrong? Thanks.

UPDATE:

$.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
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

獨角戲 2024-11-22 06:43:34

您应该像文本一样读取文件,然后将其转换为 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);

You should read the file like text and then convert it to json. This utility should help you:

    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);
    }

Remember to call it with full path like:

var gadgetPath = System.Gadget.path;
var jsonFile = gadgetPath + "\\" + "foo.json";

var json = getJsonFromFile(jsonFile);
喜爱皱眉﹌ 2024-11-22 06:43:34

Windows 小工具安全沙箱限制将干扰 ajax 的工作方式。
当您将 url 传递给 ajax 调用时,它会尝试向该 url 发出 HTTP 请求,并且在浏览器中,该 url 确实以 (file://localpath) 的形式存在,但对于 Windows 小工具,情况有点不同不同的是,不能使用从 window.location 派生的相对 url,因为这里不存在 window 对象。

这里最简单的方法是简单地将 json 放入 JS 文件中并使用 script 标签引用它,因为 HTML DOM 的这一部分由负责渲染/加载内容的 sidebar.exe 代码处理。

谢谢尼拉吉

The windows gadgets security sandbox restrictions, will be interfering with the way ajax works.
When you pass a url to ajax call, it trid to make an HTTP request to that url, and incase of a browser the url does exist in the form of (file://localpath), but with a windows gadgets things are a bit different, i.e the relative url which is derived from window.location cannot be used as the window object does not exist here.

The easiest here would be to simply put the json in a JS file and refer it using the script tag, as that part of the HTML DOM is taken care of by the sidebar.exe code which takes care of rendering/loading stuff.

Thanks

Neeraj

扮仙女 2024-11-22 06:43:34

复制原始帖子的评论,这似乎提供了合适的解决方法。

我怀疑问题是 Windows Widget 缺乏对 .json 文件类型的支持。作为解决方法,我建议您将 JavaScript 对象设置为 .js 文件内的变量并使用 getScript 检索并执行该 JavaScript。

执行此操作后,该变量应该可以在全局命名空间中访问。

Duplicate from the comments on the original post, which seemed to provide a suitable work-around.

I suspect the problem is that the Windows Widget lacks support for .json file types. As a work-around, I suggest that you set your JavaScript object to a variable inside of a .js file and use getScript to retrieve and execute that JavaScript.

After doing so, that variable should be accessible in the global namespace.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文