чтение данных JSON из файла - PullRequest
0 голосов
/ 26 июня 2011

Я использую сервер с языком программирования Go, и когда я загружаю его в браузер, вызывается функция временного обработчика, и файл getjson.html обслуживается этой функцией временного обработчика. Теперь на экране отображается кнопка «Получить данные Json». При нажатии на эту кнопку я не получаю никаких результатов (поскольку что-то должно отображаться на экране).

Я проверил консоль javascript и ошибок как таковых нет. Я не могу понять, в чем проблема, почему на экране нет вывода.

Содержание servejson.go:

package main

import (
    "http"
    "flag"
)

var path = flag.String("root", "/home/chinmay/work/json/getjson.html", "Set root directory, use absolute path")

func temp(w http.ResponseWriter, r *http.Request){
    w.Header().Set("Content-Type", "text/html")
    http.ServeFile(w,r,*path)
}

func main(){
    http.HandleFunc("/",temp)
    http.ListenAndServe(":8080", nil)
}

Содержимое getjson.html:

package main

import (
    "http"
    "flag"
)

var path = flag.String("root", "/home/chinmay/work/json/getjson.html", "Set root directory, use absolute path")

func temp(w http.ResponseWriter, r *http.Request){
    w.Header().Set("Content-Type", "text/html")
    http.ServeFile(w,r,*path)
}

func main(){
    http.HandleFunc("/",temp)
    http.ListenAndServe(":8080", nil)
}

Содержимое json_data.js:

{ 
  "firstName": "John",
  "lastName": "Doe",
  "age": 25
}

Ответы [ 3 ]

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

$. GetJSON () нуждается в URL в качестве параметра. Вы пытаетесь получить доступ к файлу из структуры каталогов локального компьютера / сервера, что невозможно в JS.

См. Документацию jquery http://api.jquery.com/jQuery.getJSON/

0 голосов
/ 28 июня 2013

Извините, если это не связано с Go, но я не могу найти решение аналогичной проблемы в JQuery, и решение не связано с используемым инструментом.

У меня сегодня проблема с имитацией запроса Json для программы, связанной с базой данных, без базы данных. Поэтому я сохранил результат Json в файл и хотел использовать его вместо этого. Файл json.txt находился на сервере и просматривался в браузере, но $ .getJSON выдавал ошибку.

Чтобы решить эту проблему, все, что мне нужно было сделать, это переименовать файл с расширением "html" , например, json.html, и удалить заголовок в файле. Т.е. в начале вашего текстового файла НЕ должно быть «Content-Type: application / json».

Может относиться к веб-серверу (Apache) или безопасности браузера (Firefox), но по крайней мере это сработало.

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

Да, вы можете. Пример в реальном времени. При условии, что json.txt является ресурсом рядом с документом, в котором выполняется этот код, и (в некоторых браузерах) при условии, что он не запускается из локального файла (например, file://). URL, а не http://; некоторые браузеры в порядке с локальными файлами, обращающимися к другим локальным файлам через ajax, другие нет).

Пара заметок:

  • В

    $("div").append(field + " ");
    

    line, field будет значением каждого свойства (например, "Джон").

  • Порядок, в котором перечислены свойства, полностью не определен.

Так что для этого конкретного примера вам, вероятно, будет лучше использовать

<script type="text/javascript">
$(document).ready(function(){
  $("button").click(function(){
    $.getJSON("json.txt",function(result){
      $("div").append(result.firstName + " " + result.lastName + " " + result.age);
    });
  });
});
</script>

Живой пример


Обновление : Судя по вашим комментариям к другому ответу, вам может быть неясно, где и как выполняется код скрипта. Скрипт JavaScript запускается в браузере клиента. Путь к ссылке json.txt точно такой же, как (скажем) путь к изображению, которое вы хотите показать на странице. json.txt должен быть доступен через веб-сервер, так же, как изображение должно быть доступно через веб-сервер. Думайте о json.txt как о другом ресурсе, используемом вашей веб-страницей, как и о любом другом. С точки зрения пути и того, как вы должны сделать json.txt доступными, применяются те же правила. Для ясности: скрипт, работающий на стороне клиента на веб-странице, не может получить доступ к файлу на стороне сервера, который не может быть получен браузером.


Обновление 2 : вы опубликовали больше кода, и похоже, что вы заставили свой сервер только обслуживать файл getjson.html. Ваш сервер также должен обслуживать файл json.txt, иначе браузер не сможет получить к нему доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...