Проблема с извлечением данных из файла JSON в гаджете Windows - PullRequest
4 голосов
/ 13 июня 2011

Я пытаюсь получить доступ к данным, хранящимся в файле JSON (в той же папке, что и гаджет), с помощью jquery. Следующий пример отлично работает как в Firefox, так и в Internet Explorer (показывает «успех»), но как гаджет не работает (показывает «сбой»).

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

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

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

Есть идеи, что я делаю не так? Спасибо.

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
}

Ответы [ 3 ]

5 голосов
/ 19 июня 2011

Вы должны прочитать файл как текст, а затем преобразовать его в 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 голос
/ 20 июня 2011

Ограничения безопасности песочницы для окон гаджетов будут мешать работе ajax.Когда вы передаете URL-адрес в вызов ajax, он делает HTTP-запрос к этому URL-адресу, и в случае браузера URL-адрес существует в виде (file: // localpath), но с гаджетами Windows все немногодругой, то есть относительный URL, который получен из window.location, не может быть использован, так как объект window здесь не существует.

Здесь проще всего было бы просто поместить json в файл JS и ссылаться на него, используятег script, так как эта часть HTML DOM заботится о коде sidebar.exe, который заботится о рендеринге / загрузке.

Спасибо

Neeraj

0 голосов
/ 16 июня 2011

Дублирование комментариев к исходному сообщению, которое, по-видимому, обеспечивает подходящий обходной путь.

Я подозреваю, что проблема в том, что в виджете Windows отсутствует поддержка типов файлов .json.В качестве обходного пути я предлагаю установить в качестве объекта JavaScript переменную внутри файла .js и использовать getScript для извлечения и выполнения этого JavaScript.

После этогопеременная должна быть доступна в глобальном пространстве имен.

...