Итак, у меня есть несколько сценариев, которые я написал, которые устанавливают карту Google на моей странице. Эти сценарии включены в <head> моей страницы и используют jQuery для построения карты с маркерами, созданными из списка адресов на странице.
Однако у меня есть точные координаты для каждого адреса, которые требует JavaScript для правильного размещения маркеров. Это не та информация, которую я хочу видеть на экране для пользователя, так каков наилучший способ поместить эти данные в мой документ?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если информация не должна быть видна пользователю, она не должна оставаться в документе. Например, данные могут оставаться в области сценария. Однако, если по разным причинам это невозможно, вы можете использовать div со style = "display: none", который скроет информацию.
Моей первой мыслью был скрытый ввод с CSV или подобными данными. Поскольку данные на самом деле не секретные, просто не для отображения.
<input id = "coordinates" type = "hidden" value = "123.2123.123:123,123,321;....." />
Затем получите доступ к нему с помощью jquery
var myCoordsCSV = $("#coordinates").val();
Обновлено: в ответе ниже упоминается JSON, который был бы лучшим решением в сочетании с использованием нескольких скрытых входов, как указано в другом ответе.
Я бы не рекомендовал использовать стиль, чтобы что-то скрыть, он будет отображаться в браузерах без (или с отключенной) поддержкой css и выглядеть странно.
Вы можете сохранить его в переменной javascript или добавить форму со скрытыми значениями, подобными этому (внутри неиспользованной формы, чтобы убедиться, что она проверяет):
<form action = "#" method = "get" id = "myHiddenValues">
<input type = "text" name = "hiddenval1" id = "hiddenval1" value = "1234"/>
<input type = "text" name = "hiddenval2" id = "hiddenval2" value = "5678"/>
</form>
которые вы можете читать и обновлять с помощью javascript.
Если вам нужны значения внутри формы, которую вы фактически отправляете, поместите туда скрытые значения. Если вам не нужно их отправлять, просто прочтите и запишите их через JS, поместите их в отдельную форму. (Форма предназначена только для того, чтобы все равно проверять теги ввода ..)
Гарет, вы можете взглянуть на JSON на http://www.json.org/
Помимо преимущества компактности, он имеет сильную поддержку на стороне сервера, и если вы решите в будущем загружать координаты динамически с помощью HTTPRequest, это будет очень легко сделать без значительных изменений существующего скрипта.
JSON - нотация объектов JavaScript - это, по сути, собственный способ сериализации объектов JavaScript.
Вот несколько примеров: http://www.json.org/example.html
Вы даже можете сохранить всю информацию об адресе в массиве объектов JavaScript, записанных в JSON, и динамически построить список на экране. Это даст вам возможность легко сортировать, фильтровать и манипулировать адресами любым удобным вам способом во время выполнения.
Альтернативный способ будет охватывать каждый адрес тегом (подойдет простой div) и вводить новый атрибут для тега, содержащего координаты:
<div id = "addr1" coordinates = "...">
17 Coldwell Drive<br />
Blue Mountain<br />
BA93 1PF<br />
United Kindom
</div>
потом
var myCoordsCSV = $("addr1").coordinates;
Вы можете комбинировать второй подход с JSON (объект координат хранилища), если хотите, или добавить два атрибута для каждой координаты или сохранить список с разделителями-запятыми и т. д.
Второй подход также хорошо деградирует и удобен для поисковых ботов.
Конечно, но независимо от формата встраивание <script> в мой HTML по определению навязчиво и не совсем то, о чем был мой вопрос. Вы хотите сказать, что в этом случае лучше не обращать внимания на ненавязчивость?
Гарет, вам не нужно встраивать определение адресов и координат JSON в сам HTML с помощью тегов <script>. Вы можете поместить его в отдельный файл JavaScript, созданный «на лету», но при этом статически связанный с HTML, или загрузить файл динамически через AJAX с помощью jQuery.
Поскольку у вас уже есть JQuery, почему бы просто не сделать вызов AJAX на другую страницу / скрипт для получения данных координат?
Данные всегда будут видны тем, кто хочет до них добраться. Попытка скрыть это только замедлит тех, кто в этом не разбирается. Я предлагаю не использовать XHR, так как для многих это медленно и всегда увеличивает время загрузки страницы, что вы должны попытаться минимизировать. использовать массив.
var myArray = new Array();
myArray.push([1.000,1.000,"test1"]);
myArray.push([2.000,2.000,"test2"]);
myArray.push([3.000,3.000,"test3"]);
for(i=0;i<myArray.length;i++){
yourGoogleMapsAPICall(myArray[i][0],myArray[i][1],myArray[i][2]);
}
что-то вроде тебя?
Хранение данных в Javascript или JSON упускает из виду ненавязчивый Javascript. Одна из ключевых особенностей «ненавязчивости» - это изящная деградация, когда нет Javascript - и в идеале, когда нет и CSS. По этой причине вы должен помещаете данные в документ, а не в Javascript, чтобы пользователи могли их видеть.
Кроме того, вы должны представить его в виде таблицы или структуры div, которая выглядит чистой без какого-либо CSS. В этом случае таблица, вероятно, является правильной семантической структурой для представления такого рода данных. Вы можете дополнительно стилизовать таблицу для тех, у кого есть CSS, но нет Javascript. Затем Javascript может легко проанализировать данные и поместить их на карту, но если Javascript не поддерживается, данные все равно будут отображаться.
Еще одним преимуществом является то, что он будет легко очищен роботами, такими как поисковые системы, и всеми, кто хочет написать сторонний гибридный веб-сайт. (Вы могли видеть обратную сторону, если не хотите делиться ими, но если кому-то нужны данные достаточно, они все равно получат их со страницы.) Он также будет там в удобной форме для пользователей с ослабленным зрением, использующих программы чтения с экрана. .
Теперь вы не хотите, чтобы таблица была видимой по умолчанию, поэтому вам придется скрыть ее с помощью CSS. Но что, если у пользователя есть CSS, но нет Javascript? Тогда вы, вероятно, захотите показать таблицу ... вот в чем заключается изящная деградация. Итак, что вам нужно сделать, это сделать таблицу видимой в CSS (т.е. не скрывать ее явно), а затем запустить некоторый Javascript, чтобы скрыть ее при инициализации:
document.getElementById("geodata").style.display = "none";
или какой-либо эквивалент для конкретной библиотеки, например
$("geodata").hide()
Единственная проблема в том, что если вы запустите это в document.onload (), таблица будет видна в течение нескольких секунд. Поэтому включите его в тег скрипта сразу после вывода таблицы. Это одна из ситуаций, когда можно включить тег скрипта в HTML. Если вы это сделаете, то избегать с использованием специфичного для библиотеки кода, поскольку библиотека, возможно, еще не загрузилась к моменту оценки вашего встроенного скрипта.
Теперь у вас есть все кейсы: - JS и CSS - данные красиво представлены на карте - нет JS, но CSS - данные красиво представлены в таблице - без JS и без CSS - данные представлены в виде необработанной HTML-таблицы (другой случай, JS и отсутствие CSS возникает редко, вы можете справиться с этим, если хотите, но это бессмысленно)
Ваш код Javascript также будет чистым, потому что он анализирует аккуратно построенную структуру данных. Вы можете легко проверить таблицу во время разработки, чтобы увидеть, есть ли в ней правильные данные и правильно ли отображает эти данные.
Ваш ответ, безусловно, является тем ответом, который я искал, но, насколько нам известно, географические данные нет всегда актуальны для пользователя и не должны быть видны ни в одном из резервных вариантов. Я рад, что данные можно получить с помощью машины - именно это и будет делать мой скрипт jQuery для построения карты.
Рад, что это было полезно. Я не уверен, что понимаю, что вы подразумеваете под ненавязчивым в этом случае ... это означает гораздо больше, чем просто скрытие контента, когда JS отсутствует. Если данные представляют ценность для кого-то в виде карты, они, вероятно, будут полезны людям без JS или с ограниченными возможностями, которые не позволяют видеть карту.
Одна из ключевых особенностей «ненавязчивости» - это постепенное ухудшение качества при отсутствии Javascript - в данном случае это не имеет значения, если javascript не включен, карты Google не будут работать, и эти данные бесполезны. Это не похоже на представление пользователю необработанных данных с координатами - это приемлемая деградация.
На самом деле использование формы - не лучшее решение, потому что она не будет работать внутри другой формы. Но из другого обсуждения кажется, что встроенный блок скрипта, вероятно, является наиболее полезным решением.