Возьмите пару lat / long из JavaScript для использования в date_sunset в PHP

#php #javascript #date

#php #javascript #Дата

Вопрос:

Я решил, что хотел бы сделать амбициозную смену настроения в зависимости от времени суток. Мне нужно получить время и сравнить его с заходом и восходом солнца любого данного дня.

До сих пор я здесь нашел несколько javascript, которые хорошо работают. Кто-нибудь может сказать мне, как я мог бы присвоить широту и длину PHP-функции date_sunset? У меня есть IP в переменной PHP с использованием $_SERVER['REMOTE_ADDR'] , но это все, что у меня есть. Я больше ничего не могу сделать, поскольку я никогда не использовал эту функцию и никогда не пытался объединить PHP и JS. Есть идеи?

— Обновить —

Я пытался использовать функцию jQuery $.ajax. Вот мой код;

 <script language="JavaScript">
var lat = geoip_latitude();
var long = geoip_longitude();
$(document).ready(function(){
   //var url = 'http://www.ransomedesign.co.uk/web/?lat='   lat   'amp;long='  long;
   // $.get(url);
  $.ajax({
  type: "GET",
  data: { lat:lat, long:long},
  url: "http:www.ransomedesign.co.uk/web/",
  success: function() { alert("you win"); }
  })
});
</script>
  

Там есть два разных подхода. (1-й закомментирован). Это действительно заполняет мой php-код $ _SERVER, но только по второму запросу страницы для моего сайта. Мне действительно нужно, чтобы это было обработано при первом посещении, прежде чем что-либо загрузится. После этого значение будет сохранено в сеансе, а php сделает все остальное.

Кто-нибудь может увидеть, что не так с этим кодом или почему он не работает сразу? Мой php, если после этого, это правильно?

Большое спасибо…

Комментарии:

1. На самом деле вам нужно будет беспокоиться только о широте.

Ответ №1:

Учитывая этот фрагмент там, у вас было бы две переменные, geoip_latitude и geoip_longitude . Возьмите эти переменные, поместите их в вызов AJAX на вашем сервере, который затем выполнит вычисления:

HTML:

 <div id="sunset"></div>

<script>
    $('#sunset').load('/path/to/script.php?lat='   geoip_latitude   'amp;lon=' amp; geoip_longitude);
</script>
  

php:

 <?php

$lat = $_GET['lat'];
$lon = $_GET['lon'];

echo date_sunset(time(), SUNFUNCS_RET_STRING, $lat, $long);
  

Это предполагает, что у вас загружен / доступен jquery и сервер на PHP версии 5. Я также использую время сервера, которое может полностью отличаться от дня клиента. Вероятно, это не сработает из коробки, но должно помочь вам начать.

Комментарии:

1. большое спасибо за ответ. Я посмотрю на это и попытаюсь решить, что делать.

Ответ №2:

Я бы использовал AJAX для этого. Вы используете GeoIP JavaScript, поэтому сначала получите lat и long :

 var lat = geoip_latitude () ;
var long = geoip_longitude () ;
  

затем отправьте ее в серверный скрипт, например mood.php :

 var xhr = new XMLHttpRequest () ;
xhr . onreadystatechange = function ()
{
   if ( xhr . readyState == 4 amp;amp; xhr . status == 200 )
   {
      // do something with server response
   }
}
xhr . open ( "POST", "mood.php", true ) ;
xhr . setRequestHeader ( "Content-type", "application/x-www-form-urlencoded" ) ;
xhr . send ( "lat="   lat   "amp;long="   long ) ;
  

и mood.php может выглядеть так:

 <?php
   $lat = $_POST [ "lat" ] ;
   $long = $_POST [ "long" ] ;

   echo "something depending on lat and long" ;
?>
  

Редактировать.

Если сервер отправляет ответ, вы можете прочитать его, вызвав xhr . responseText :

 xhr . onreadystatechange = function ()
{
   if ( xhr . readyState == 4 amp;amp; xhr . status == 200 )
   {
      alert ( "Server response: "   xhr . responseText ) ;
   }
}
  

Если сервер отправляет XML-контент, то вы можете вызвать xhr . responseXML — он использует собственный синтаксический анализатор XML.

https://developer.mozilla.org/en/AJAX/Getting_Started

Комментарии:

1. Благодаря этому this, я собираюсь просмотреть оба ответа и попытаться решить, что делать. Я никогда не использовал AJAX, хотя jQuery уже запущен для других материалов на моем веб-сайте.

2. Привет, я просто пытаюсь заставить это работать — в прокомментированном фрагменте, который говорит сделать что-то с ответом сервера, что я должен указать? До сих пор я настроил это для отправки переменных в header.php в моей теме WordPress это ничего не возвращает…

3. Привет, сейчас я пытаюсь сделать это немного по-другому, я пытаюсь получить значения в PHP-СЕССИИ, используя get. Широта и длина добавляются к URL с помощью AJAX. Хотя у меня все еще возникают некоторые проблемы, я обновил свой исходный пост, если вам захочется взглянуть…

Ответ №3:

На этот вопрос не было ответа как такового, в итоге я получил модуль PHP и файл .dat, установленный на моем хостинге для меня. AJAX действительно работал, но только после посещения страницы с моего сайта, что, к сожалению, было бесполезно. Спасибо всем за помощь..