×
OpenWeatherMap API: еще один погодный информер на Ruby on Rails (28 июнь 2017)

Возможно, любители и знатоки Joomla заинтересуются иным MVC-фреймворком, имя которому - Ruby on Rails?

× Время от времени - и не так чтобы редко - на форуме звучат вопросы по нативному PHP... решили собирать их в этой ветке.

Идея Передаем данные из js в php. Ajax

Больше
3 года 2 мес. назад - 2 мес. 2 нед. назад #1 от Aleksej
Aleksej создал эту тему: Передаем данные из js в php. Ajax
Хотелось бы предложить читателям блога небольшой экскурс в мир js и php; целью чего и явилось написание статьи
Снова Maxmind, снова погодные информеры, и снова ajax . Собственно, это уже цикл статей, в котором на примере обращения к нескольким различным API сделана попытка рассказать и пояснить наглядными примерами, а также живыми демками - некоторые аспекты работы js- и php- скриптов. Разумеется, ряд этот очень пока неполон; но и предназначены эти рассказы сугубо для начинающих программеров.






В частности, рассказ о погодном информере на ajax-e призван проиллюстрировать возможность передачи значения переменных из js… который, разумеется, выполним сугубо на вашем локальном компьютере... в массив php, что возможно, для абсолютного большинства пользователей, только на web-сервере. За живыми примерами, повторюсь, вам - по приведенной выше ссылке, welcome. Здесь же опубликую лишь еще один скрипт, который вы без проблем можете скопипастить и без помех вволю потренироваться c ним на своем серваке.. как показывает Google, вопросы безопасной передачи данных из js в php как нельзя более актуальны в Сети, и наш форум - далеко здесь не исключение. Это как раз тот момент, когда копипастить можно и нужно... пробуйте. "Как сделать??" - а вот так, как показано ниже.


test.php
<?php
if (! empty($_REQUEST)){// Process AJAX request
    file_put_contents('log', print_r($_REQUEST, true));
    echo('Answer from server. Got data: ' . print_r($_REQUEST, true)); // Return data
}
else{
?>
<html>
<head>
    <title>Ajax base example</title>
    <script language="JavaScript" src="http://j.maxmind.com/app/geoip.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
</head>
<body>
    <script language="JavaScript">document.write(geoip_latitude());</script>
    <script language="JavaScript">document.write(geoip_longitude());</script>

    <div id="results"></div>

<script language='JavaScript'>
$.ajax({
    type: "GET",
    url: "test.php",
    data: {
        geoip_latitude: geoip_latitude(),
        geoip_longitude: geoip_longitude()
    },
    success: function(html){
        alert(html);
        $("#results").append(html);
    }
});
</script>
</body>
</html>
<?php
}
?>
Последнее редактирование: 2 мес. 2 нед. назад от p.rishard.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
3 года 2 мес. назад - 3 года 2 мес. назад #2 от tekumze
tekumze ответил в теме Передаем данные из js в php. Ajax
привет. а ajax здесь обязателен, имею в виду в информере?
скрипт из этого топика не работает.

P.S. виноват, работает. eсли назвать его test.php…
Последнее редактирование: 3 года 2 мес. назад от tekumze.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
3 года 2 мес. назад - 3 года 2 мес. назад #3 от Aleksej
Aleksej ответил в теме Передаем данные из js в php. Ajax

tekumze пишет: работает. eсли назвать его test.php…


Да, разумеется.
Либо обозвать как угодно, но изменить, соответственно, и эту строчку:

url: "test.php",


tekumze пишет: привет. а ajax здесь обязателен, имею в виду в информере?



Нет, не обязательно. Что мешает вам, допустим, первый из опубликованных скриптов изменить таким образом, чтобы он указывал не на web (т.е. не на World Weather Online), а на, предположим, script.php ? Сперва будет открываться одна страничка, затем - другая; все это вкупе может выглядеть примерно так. Пожалуйста, без ajax:


test.php
<script language="JavaScript" src="http://j.maxmind.com/app/geoip.js"></script>
<script language="JavaScript">document.write(geoip_latitude());</script>
<script language="JavaScript">document.write(geoip_longitude());</script>

<?php
if (isset($_GET['lat']) AND isset($_GET['lon'])) {
}
else {
?>
<script language='javascript'>
location.href="script.php?lat=" + geoip_latitude() + "&lon=" + geoip_longitude();
</script>
<?
}

script.php
<?php
if (isset($_GET['geoip_latitude']) AND isset($_GET['geoip_longitude'])) {
}
echo "<br>";
$loc_array = array($_GET['lat'],$_GET['lon']);
$api_key="vash_api_key"; 
$num_of_days=1;
$loc_safe = array();
foreach($loc_array as $loc){
 $loc_safe[] = urlencode($loc);
}
$loc_string=implode(',', $loc_safe);
$basicurl = sprintf('http://api.worldweatheronline.com/free/v1/weather.ashx?key=%s&q=%s&num_of_days=%s', $api_key, $loc_string, intval($num_of_days));
$xml_response = file_get_contents($basicurl);
$xml = simplexml_load_string($xml_response);
$ss = array();
foreach ($xml[0] as $name => $val) { 
foreach ($val as $name1 => $val1)
{
$ss[$name1] = $val1;
}
}
echo '<img src="' . $xml->weather->weatherIconUrl . '"/>';
echo "<br>";
echo "<br>";
echo $ss["date"];
echo "<br>";
echo "Температура {$ss["temp_C"]} С";
echo "<br>";
echo "Мин. температура сегодня {$ss["tempMinC"]} С*";
echo "<br>";
echo "Макс. температура сегодня {$ss["tempMaxC"]} С*";
echo "<br>";
echo "Скорость ветра {$ss["windspeedKmph"]} м/сек";
echo "<br>";
echo "Направление ветра {$ss["winddirection"]}";
echo "<br>";
echo "Пасмурно {$ss["cloudcover"]}%";
echo "<br>";
echo "Давление {$ss["pressure"]} mb";
echo "<br>";
echo "Влажность {$ss["humidity"]}%";
echo "<br>";
echo "Видимость {$ss["visibility"]} км";
echo "<br>";
echo $ss["weatherDesc"];
?>
Последнее редактирование: 3 года 2 мес. назад от Aleksej.
Спасибо сказали: tekumze

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
3 года 2 мес. назад - 3 года 2 мес. назад #4 от serge
serge ответил в теме Передаем данные из js в php. Ajax
For example, приведу старый классический пример скрипта, вытаскивающего из вашего браузера разрешение экрана и передающего затем данные на сервак, в php. Если скопируете скрипт на свой web-сервер и откроете затем в браузере - увидите на страничке соответствующие значения.


<?php

// проверяем существование переменных $width и $height
if (isset($_GET['width']) AND isset($_GET['height'])) {
    // если переменные существуют, то выводим полученные значения на экран
    echo 'Ширина экрана: ' . $_GET['width'] . "<br />\n";
    echo 'Высота экрана: ' . $_GET['height'] . "<br />\n";
}

// если переменные не существуют, то выполняем следующее
else {
    // PHP сгенерирует код JavaScript, который обработает браузер
    // пользователя и передаст значения обратно PHP-скрипту через протокол HTTP
    echo "<script language='javascript'>\n";
    echo " location.href=\"${_SERVER['SCRIPT_NAME']}?${_SERVER['QUERY_STRING']}"
            . "width=\" + screen.width + \"&height=\" + screen.height;\n";
    echo "</script>\n";
}

?>

А я смогу! - А поглядим! - А я упрямый!
Последнее редактирование: 3 года 2 мес. назад от serge.
Спасибо сказали: tekumze

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
3 года 2 мес. назад #5 от Aleksej
Aleksej ответил в теме Передаем данные из js в php. Ajax
Да, и если что-то не идет - не отчаивайтесь.
Включите лог в php-файле; скажем, так:

$file = 'log.txt';
file_put_contents('log', $_REQUEST);

Далее смотрите log-файл. Увидите переданные данные... ну или - не увидите. :)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
2 мес. 2 нед. назад #6 от serge
serge ответил в теме Передаем данные из js в php. Ajax
Пример использования технологии ajax, основанный на фреймворке Prototype ( в верхней части скрипта подключен, как видите, prototype.js). Обработчик возвращает все что захотите: print_r, echo, любой инициированный php HTML. Вообще же отличная обзорная статья на ibm.com , посвященная различным способам использования ajax, по ссылке.

index.html
<html>
<head>
<script src="prototype.js"></script>
</head>
<body>
<form id="myform">
<table>
  <tr><td>First</td><td><input type="text" name="first"></td></tr>
  <tr><td>Last</td><td><input type="text" name="last"></td></tr>
  <tr><td>Email</td><td><input type="text" name="email"></td></tr>
</table>
<input type="button" onclick="dosubmit()" value="Submit">
</form>
<div id="result" style="padding:5px;">
</div>
<script>
function dosubmit( ) {
  new Ajax.Updater( 'result', 'add.php', { method: 'post',
    parameters: $('myform').serialize() } );
  $('myform').reset();
}
</script>
</body>
</html>


add.php
Thanks <?php echo( $_POST['first'] ) ?> <?php echo( $_POST['last'] ) ?>!

А я смогу! - А поглядим! - А я упрямый!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
2 мес. 1 нед. назад #7 от serge
serge ответил в теме Передаем данные из js в php. Ajax
Часы на ajax, кому надо. B)

index.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; Charset=UTF-8">
<script type="text/javascript" src="jquery.js"></script>
</head>

<body>
	
	<div id="content"></div>
	
	<script>
		function show()
		{
			$.ajax({
				url: "time.php",
				cache: false,
				success: function(html){
					$("#content").html(html);
				}
			});
		}
	
		$(document).ready(function(){
			show();
			setInterval('show()',1000);
		});
	</script>
	
</body>
</html>

time.php
<?php echo date("H:i:s"); ?>

Только jquery.js не забудьте, без него не заработает.

А я смогу! - А поглядим! - А я упрямый!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.