Вопросы по передаче через JSON
yury
Опубликовано 23.04.2013 08:34
Супер Администратор
Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
в теме предлагаю задавать вопросы связанный с JSON
и я как и прежде со своим вопросом, на котором и интересно разобрать этот момент. при подключении библиотеки квери версии 1.3.2 все работает корректно, но новая версия яндекс.карт позволяет не подключать столь древнюю библиотеку, но и JSON тогда почему то не работает.
рабочий синтаксис с квери 1.3.2
GeSHi: Javascript <script src="http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU" type="text/javascript"></script>
<script type="text/javascript" src="http://yandex.st/jquery/1.3.2/jquery.min.js"></script>
< script type= "text/javascript" >
ymaps.ready ( init) ;
function init ( ) {
var myMap = new ymaps.Map ( "map" , { center: [ 55.302988 , 47.415765 ] , zoom: 11 , checkZoomRange: true } ) ;
myMap.controls .add ( "zoomControl" )
.add ( "typeSelector" )
.add ( "mapTools" ) ;
myGeoObjects = [ ] ;
$.getJSON ( "markers.php" , function ( json) {
if ( json.status == 'OK' ) {
for ( i = 0 ; i < json.markers .length ; i++ ) {
myPlacemark = new ymaps.Placemark (
// Координаты
[ json.markers [ i] .lat , json.markers [ i] .lon ] ,
// данные
{
balloonContentHeader: '<div style="color:#659cc9;">' + json.markers [ i] .cname + '</div>' ,
balloonContentFooter: '<strong>Адрес:</strong> ' + json.markers [ i] .address + '</span>' ,
} ) ;
myGeoObjects.push ( myPlacemark) ;
}
clusterer = new ymaps.Clusterer ( ) ;
clusterer.options .set ( {
gridSize: 100 ,
minClusterSize: 2 ,
synchAdd: true
} )
clusterer.add ( myGeoObjects) ;
myMap.geoObjects .add ( clusterer) ;
}
else
{
alert ( 'Произошла ошибка!' ) ;
}
} )
}
</ script>
<div id="map" style="height: 400px;"></div>
Добавлено за 0.003 секунд, используя GeSHi 1.0.8.10
отключил библиотеку 1.3.2, т.к в движке юзается новая версия 1.8.3 - JSON перестает передавать данные, т.е данные на карте не выводятся
в чем может быть проблема? при этом новая версия яндекс.карт позволяет использовать такой скрипт
GeSHi: HTML <script src = "http://api-maps.yandex.ru/2.0/?load=package.standard,package.clusters&lang=ru-RU" type = "text/javascript" ></ script > Добавлено за 0.002 секунд, используя GeSHi 1.0.8.10
но и подставив его, JSON не отдает данные
Изменил(а) yury , 23.04.2013 08:40
yury
Опубликовано 23.04.2013 08:36
Супер Администратор
Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
если же подставить некие данные напрямую без JSON, то все выводит корректно
GeSHi: Javascript // Создадим 500 меток со случайными координатами около центра Москвы.
for ( var i = 0 ; i < 500 ; i++ ) {
var coordinates = [
center[ 0 ] + 0.5 * Math.random ( ) * ( Math.random ( ) < 0.5 ? - 1 : 1 ) ,
center[ 1 ] + 0.7 * Math.random ( ) * ( Math.random ( ) < 0.5 ? - 1 : 1 )
] ;
geoObjects[ i] = new ymaps.Placemark ( coordinates, {
name : 'Метка №' + i,
clusterCaption: 'Метка №' + i,
balloonContentBody: '<br>Варкалось. Хливкие шорьки<br>' +
'Пырялись по наве<br>' +
'И хрюкотали зелюки,<br>' +
'Как мюмзики в мове.<br>' ,
balloonContentHeader: 'Бармаглот' ,
balloonContentFooter: 'Л. Кэрролл'
} ) ;
}
// Добавим полученные геообъекты в кластеризатор.
clusterer.add ( geoObjects) ;
// А сам кластеризатор добавим на карту.
myMap.geoObjects .add ( clusterer) ;
Добавлено за 0.002 секунд, используя GeSHi 1.0.8.10
Rush
Опубликовано 23.04.2013 09:02
Администратор
Разработчики
Группа поддержки
Сообщений: 1418
Зарегистрирован: 31.08.2010 14:41
не знаю, смотри консоль
mishqa35
Опубликовано 23.04.2013 09:11
Опытный пользователь
Сообщений: 307
Зарегистрирован: 04.01.2011 18:50
Код });
}
</script>
Код balloonContentHeader: '<div style="color:#659cc9;">'+json.markers[i].cname+'</div>',
balloonContentFooter: '<strong>Адрес:</strong> '+json.markers[i].address+'</span>',
yury
Опубликовано 23.04.2013 09:15
Супер Администратор
Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
тогда бы вариант с квери 1.3.2 тоже бы наверное не работал? а с ним работает. стоит его отключить и даже подключить
GeSHi: HTML <script src = "//api-maps.yandex.ru/2.0/?load=package.standard,package.clusters&lang=ru-RU" type = "text/javascript" ></ script > Добавлено за 0.001 секунд, используя GeSHi 1.0.8.10
как указано http://api.yandex.ru/maps/jsbox/cluster_balloon_layout
и перестает выводить
mishqa35
Опубликовано 23.04.2013 09:20
Опытный пользователь
Сообщений: 307
Зарегистрирован: 04.01.2011 18:50
возможно старая версия квери не так критично относится к синтаксическим ошибкам
пример что ты дал не подключает квери, т.к там нету его кода вообще
yury
Опубликовано 23.04.2013 09:22
Супер Администратор
Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
пробовал чисто адаптировать код из песочницы
GeSHi: Javascript $.getJSON ( "markers.php" , function ( json) {
if ( json.status == 'OK' ) {
for ( i = 0 ; i < json.markers .length ; i++ ) {
geoObjects[ i] = new ymaps.Placemark (
// Координаты
[ json.markers [ i] .lat , json.markers [ i] .lon ] ,
// данные
{
name : 'Метка №' + i,
clusterCaption: 'Метка №' + i,
balloonContentHeader: '<div style="color:#659cc9;">' + json.markers [ i] .cname + '</div>' ,
balloonContentFooter: '<strong>Адрес:</strong> ' + json.markers [ i] .address + '</span>'
} ) ;
}
// Добавим полученные геообъекты в кластеризатор.
clusterer.add ( geoObjects) ;
// А сам кластеризатор добавим на карту.
myMap.geoObjects .add ( clusterer) ;
}
else
{
alert ( 'Произошла ошибка!' ) ;
}
} ) ;
Добавлено за 0.002 секунд, используя GeSHi 1.0.8.10
но все равно не выводит.
yury
Опубликовано 23.04.2013 09:25
Супер Администратор
Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
mishqa35 написал:
возможно старая версия квери не так критично относится к синтаксическим ошибкам
пример что ты дал не подключает квери, т.к там нету его кода вообще
так я прямо из песочницы взял код и подставил туда вывод массива. все остальное осталось прежним, но почему то не выводит. может JSON как то вызывается по другомув новых версиях, а не просто $.getJSON?
mishqa35
Опубликовано 23.04.2013 09:30
Опытный пользователь
Сообщений: 307
Зарегистрирован: 04.01.2011 18:50
Код for (i = 0; i < json.markers.length; i++) {
myPlacemark[i] = new ymaps.Placemark(
// Координаты
[json.markers[i].lat, json.markers[i].lon],
// данные
{
balloonContentHeader: '<div style="color:#659cc9;">'+json.markers[i].cname+'</div>',
balloonContentFooter: '<strong>Адрес:</strong> '+json.markers[i].address+'</span>'
});
myGeoObjects.push(myPlacemark[i] );
}
mishqa35
Опубликовано 23.04.2013 09:33
Опытный пользователь
Сообщений: 307
Зарегистрирован: 04.01.2011 18:50
скинул бы файл markers.php возможно там проблема
yury
Опубликовано 23.04.2013 09:40
Супер Администратор
Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
вот код маркерса
GeSHi: PHP <?php
require_once "maincore.php" ;
header ( "Content-Type: application/x-suggestions+json; charset=windows-1251" ) ; if ( $_SERVER [ 'HTTP_X_REQUESTED_WITH' ] == 'XMLHttpRequest' ) {
$json = '{markers:[' . "\n " ;
$query1 = "SELECT news_id, news_adress, news_coords, news_subject, FROM " . DB_NEWS. "
WHERE " . groupaccess
( 'news_visibility' ) . " AND (news_start='0'||news_start<=" . time ( ) . ") AND (news_end='0'||news_end>=" . time ( ) . ") AND news_draft='0' GROUP BY news_id ORDER BY news_sticky DESC, news_datestamp DESC" ;
{
$exp_str = explode ( "," , $par1 [ 'news_coords' ] ) ;
$lat = $exp_str [ 0 ] ;
$lng = $exp_str [ 1 ] ;
$json .= "\n " . '{' . '"id": "' . $par1 [ 'news_id' ] . '",' ;
$json .= '"cname": "' . $par1 [ 'news_subject' ] . '",' ;
$json .= '"address": "' . $par1 [ 'news_adress' ] . '",' ;
$json .= '"lat": "' . $lat . '",' ;
$json .= '"lon": "' . $lng . '"' ;
$json .= '},' ;
}
echo $json ;
echo '], ' , "\n " , '"status": "OK"' , "\n " , '}' ;
}
else
{
echo '{"status": "false"}' ;
}
}
?>
Добавлено за 0.022 секунд, используя GeSHi 1.0.8.10
yury
Опубликовано 23.04.2013 09:47
Супер Администратор
Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
вообще интересный момент обнаружил, что просто подставив JSON скрипт перестает выводить даже дефолтный код песочницы, хотя ему должно быть все равно наверное
GeSHi: Javascript
$.getJSON ( "markers.php" , function ( json) {
if ( json.status == 'OK' ) {
здесь рабоий код песочницы, который перестал выводиться
}
else
{
alert ( 'Произошла ошибка!' ) ;
}
} )
Добавлено за 0.001 секунд, используя GeSHi 1.0.8.10
mishqa35
Опубликовано 23.04.2013 15:14
Опытный пользователь
Сообщений: 307
Зарегистрирован: 04.01.2011 18:50
Чтобы загрузка происходила сразу после загрузки страницы
Код jQuery(document).ready(function () {
весь js код ..
});
yury
Опубликовано 23.04.2013 15:17
Супер Администратор
Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
mishqa35 написал:
Чтобы загрузка происходила сразу после загрузки страницы
Код jQuery(document).ready(function () {
весь js код ..
});
так вот дело в том, что либо не передается через Json Данные, либо просто не выводятся. с 1.3.2 видимо сменилось что-то у актуальных версий квери
mishqa35
Опубликовано 23.04.2013 15:21
Опытный пользователь
Сообщений: 307
Зарегистрирован: 04.01.2011 18:50
Оффтопик много чего изменилось с 1.3.2
json можно передать не только с помощью $.getJSON
$.ajax(, {},json); примерно так
yury
Опубликовано 23.04.2013 15:31
Супер Администратор
Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
вот что у меня получилось, подставив джейсон в пример из песочницы
GeSHi: Javascript
$.getJSON ( 'markers.php' , function ( json) {
if ( json.status == 'OK' ) {
for ( var i = 0 ; i < json.markers .length ; i++ ) {
var coordinates = [
[ json.markers [ i] .lat , json.markers [ i] .lon ] ,
] ;
geoObjects[ i] = new ymaps.Placemark ( coordinates, {
name : '' + json.markers [ i] .cname + '' ,
balloonContentHeader: '<div style="color:#659cc9;">' + json.markers [ i] .cname + '</div>' ,
balloonContentBody: '' ,
balloonContentFooter: '<strong>Адрес:</strong> ' + json.markers [ i] .address + '</span>' ,
balloonContentFooter: ''
} ) ;
}
// Добавим полученные геообъекты в кластеризатор.
clusterer.add ( geoObjects) ;
myMap.geoObjects .add ( clusterer) ;
}
else
{
alert ( 'Произошла ошибка!' ) ;
}
} )
Добавлено за 0.002 секунд, используя GeSHi 1.0.8.10
но точки не выводит