Получение JSON
Пытаясь получить данные из JSON:
$("#head").click(function(){ $.getJSON("json.js", function(json){ alert("JSON Data: " + json); }); }); в файле: ["жо",["жорж санд","жорж","жо","жозе моуринью","жорик вартанов","жостово","жозе моуриньо","жожоба","жокей","ж� �вта газета"]] Но ничего не получается, что не так? |
alert("JSON Data: " + json); json - это объект. Нужно указывать, какой именно элемент объекта вывести. К примеру, json.element1 |
Прсто для проверки оставил так:
$("#head").click(function(){ $.getJSON("json.js", function(json){ alert("JSON Data: "); }); }); При клике ничего не появляется. |
Что в данном коде не так, писал по мануалу?
Нашёл вот что: когда в качестве callback стоит функция function(data) {} она не отрабатывает, а когда просто alert(""), то всё нормально. |
Возможно (а даже скорее всего), формат возвращаемых данных неправильный. У формата JSON есть определенные требования.
|
Проверял валидатором, всё отлично, данные выдаёт гуголь- он то не ошибается.
|
А если использовать не getJSON, а, скажем, просто ajax? Тогда результат имеется?
|
Вообще не работает...
Вот код: $("#head").click(function(){ $.ajax({ url: "json.js", dataType : "json", success: function (data) { alert("tfdf")//data.geo.lat); } }); }); Файл находится в той же папке, в нём: {"geo":{"lat":"123","lon":"321"}} |
Воспользуйтесь callback функцией error, может она скажет вам в чем ошибка:
error: function(jqXHR, textStatus, errorThrown) { alert(textStatus); } И вообще, а почему вы к JS файлу обращаетесь ? вы должны к скрипту который обрабатывается серверным языком (PHP к примеру). В этом и ошибка по моему. |
Ну это просто файл с текстом, думаю расширение неважно, да и сервер на запрос отдаёт именно text/javascript
error сейчас попробую. Вроде нашёл причину ошибки и устранил, кажется проблемы с синтаксисом. Теперь осталось обмануть гуголь и заставить отдать его мне результаты запроса, так как судя по фаербагу гуголь отдаёт пустой файл на запрос. Странно, любому браузеру на http://clients1.google.ru/complete/s...era&q=%E0&cp=1 отдаёт JSON, а скрипту нет... Кстати, если в JSON объекте находится массив ["а",["анекдоты","авито","аэрофлот","авто ру","афиша","авто","афоризмы","авианова","альфа банк","акинатор"]] как получить из него ["анекдоты","авито","аэрофлот","авто ру","афиша","авто","афоризмы","авианова","альфа банк","акинатор"] ? |
Вот ещё: этот код ошибок не вызывает, обращается на сервер, но получает пустой ответ, если смотреть в фаербаге:
$.ajax({ url: "http://tmin10.net.ru/search.js",//json.js", dataType : "json", //error: function(jqXHR, textStatus, errorThrown) {alert(textStatus);}, success: function (data) { alert("tre");//data.geo.lat); } }); error показывает error |
json.a; |
формат данных неправильный:
["а",["анекдоты","авито","аэрофлот","авто ру","афиша","авто","афоризмы","авианова","альфа банк","акинатор"]] сами догадаетесь почему? |
Цитата:
http://www.jsonlint.com/ Это просто массив без ключей сразу со значениями Цитата:
|
Цитата:
еще раз повторяю - обратите внимание на на скобки: *!*{*/!* 'foo', { 'bar' : [..] } *!*}*/!* |
Но если гуголь отдаёт именно это?
|
var response = '["а",["анекдоты","авито"]]'; var arr = eval(response); alert(arr[0]); |
Цитата:
|
Эта штука издевается:
$.ajax({ url: "http://tmin10.net.ru/search.js", dataTypeString: "text", success: function(data){ //alert(data) alert("OK"); } }); И всё равно callback не запускается... Проверил с помошбю проксика: на сервер уходит запрос, с сервера приходит ответ, а ajax ошибается и ничего не выдаёт... |
ну или более извращенный вариант если все-таки нужен объект JSON:
var obj = { *!* foo : [{ 'a' : 1, 'b' : 2 }] */!* }; var json = JSON.parse(JSON.stringify(obj)) ; alert('a : '+json.foo[0].a+'\nb : '+json.foo[0].b); |
Подскажите пожалуйста, как всё таки получить простой текст с сервера, уже даже не знаю, где могут быть ошибки...
|
Цитата:
|
Цитата:
Цитата:
|
Ну так что же не правильно в коде получении текста?
|
Цитата:
|
Цитата:
$.ajax({ url: "http://tmin10.net.ru/search.js", dataType : "json", //error: function(jqXHR, textStatus, errorThrown) {alert(textStatus);}, success: function (data) { alert("tre");//data[1]; } }); |
Может дело в том что ты пишешь:
dataType : "json" и поэтому не выполняется функция сукчесс, так как ты не получаешь JSON, и JQuery должен выдать ошибку что то типа: "parseerror" |
убери dataType
|
Я пытаюсь загрузить именно JSON, но, даже без типа, возникает ошибка.
|
А зачем ты пытаешься загрузить JSON если тебе отдают массив ?
|
А массив это не JSON?
|
Ну вроде как у JSON такой формат:
{"var1":"val1", "var2":"val2"} а у массива такой: ['val1', 'val2'] ?? И для того что бы получить из строки в формате JSON надо скобочки в eval ставить: str = eval('({"var1":"val1", "var2":"val2"})'); а для массива не надо: arr = eval('["val1", "val2"]'); Или я чего то не догоняю в этих форматах ?))) |
JSON -- это строка, в которой лежит что-то, удовлетворяющее грамматике http://json.org/
Это и массив, и объект, и строка, и число. Просто чаще всего передают объект, как наиболее расширяемую структуру. |
Да валидный JSON отдаёт google.
Лучше подскажите где в коде может быть ошибка или приведите рабочий пример, пожалуйста. Цитата из вики: Цитата:
|
Цитата:
$.get('json.html', function(data) { $.each(data, function(index, value) { alert(index + ': ' + value); }); }); |
Я видимо туплю но и Ваш код у меня не работает, можно рабочий пример с HTML обвязкой?
|
Часовой пояс GMT +3, время: 03:36. |