Передать из js в php

Передать значение из javascript в php.

На первый взгляд кажется, что для этого должно быть множество способов, но на самом деле их только два, ну по крайней мере — из известных мне. Ведь js это язык клиентской части, а php серверной и по сути совершенно не взаимосвязаны, но все же есть способ передать значение полученное js в php, правда есть и минусы этого решение, позже объясню.
 
Каким образом передавать?
Для примера возьмём значение ширины экрана и это значение передадим в php через метод GET (адресную строку браузера), можно и через POST при форме отправки, но GET в данном случае удобнее. Разместим js скрипт в шаблоне.
<script language="JavaScript">
//Заносим в переменную это значение: width=0000
getwidth = 'width='+ window.outerWidth;
//Записываем в виде картинки в DOM.
document.write('<img src="$_SERVER['DOCUMENT_ROOT']/folder/screen.php?' + getwidth + ' " '+'border="0" width="1" height="1" rel="nofollow" style="display:none;"/>');
</script>

Для обращения нам нужен доступ к файлу php по ссылке, поэтому следует создать новый php файл и передавать в него.
Теперь следует выбрать куда сохранять в cookie, которое сохраняется на стороне пользователя или в session, которая сохраняется на стороне сервера?

Собственно screen.php для Сессии
<?php
//Если значение width определено
if (isset($_GET['width'])) {
    //Указываем кодировку
    header("Content-Type: text/html; charset=utf-8");
	//Заносим значение в переменную
	$zScreen_width = $_GET['width'];
        //Удаляем html теги и т.д.
        $zScreen_width = strip_tags($zScreen_width);
        //Или преобразуем кавычки
        $zScreen_width = htmlentities($zScreen_width, ENT_QUOTES, "UTF-8");
        //Открываем сессию
        session_start();
        //Записываем в сессию значение width
        $_SESSION['width'] = $zScreen_width;
        //Выводим в файле, если надо...
        echo $_SESSION['width'];
}
else
{
	echo ":(";
}

?>

Для Куков практически аналогично…
<?php
//Если значение width определено
if (isset($_GET['width'])) {
    //Указываем кодировку
    header("Content-Type: text/html; charset=utf-8");
	//Заносим значение в переменную
	$zScreen_width = $_GET['width'];
        //Удаляем html теги и т.д.
        $zScreen_width = strip_tags($zScreen_width);
        //Или преобразуем кавычки
        $zScreen_width = htmlentities($zScreen_width, ENT_QUOTES, "UTF-8");
        //Записываем в КУКУ - width, значение, на сутки, путь куков.
	    setcookie("width", $zScreen_width, time() + 3600*24, "/");
        //Выводим в файле, если надо...
        echo $_COOKIE['width'];
}
else
{
	echo ":(";
}

?>

Использовать можно в любом файле.
//Если сессия с шириной определена
if (isset($_SESSION['width']))
   {
    //Заносим в переменку - значение ширины из сессии!
    $zScreen_width = $_SESSION['width'];
   }
	//иначе...
	else
    {
      $zScreen_width = 'Не определена...';
    }
//Или...
//Если куки с шириной определены
if (isset($_COOKIE['width']))
   {
    //Заносим в переменку - значение ширины из сессии!
    $zScreen_width = $_COOKIE['width'];
   }
	//иначе...
	else
    {
      $zScreen_width = 'Не определена...';
    }


В чём же минус этих схем?
Если Вы планируете использовать это значение в шаблоне элементарным правилом, если ширина такая, показывать это и т.д и используете какие либо шаблонизаторы, тогда это значение передастся в шаблон при следующей загрузке страницы, что есть естественно, ведь при загрузке выполняется сначала php, а после шаблон, в котором есть наш js, который в свою очередь передает эти данные в php. Исходя из этого при самой первой загрузке наш $GET width, будет не определен. Во-всём остальном схема действующая.

Возможно вы знаете способ лучше, обязательно поделитесь :)
  • avatar
  • 1
    • [ +1 ]
Статья "Передать из js в php" содержит 2 комментария
avatar
А не проще из js сразу записать в cookie?
Например…

     //дата
     var expire = new Date();
     //срок годности 1 час
     expire.setHours(expire.getHours() + 1);
     //запись
     document.cookie = "имякуки=значение; expires=" + expire.toUTCString() + "; path=/;";


После использовать методы получения и чтения куков и на основе этих методов оперировать дальше?


function get_cookie(cookie_name){
      var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );
      if ( results )
        return ( unescape ( results[2] ) );
      else
        return null;
    }

function readCookie(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++) {
            var c = ca[i];
            while (c.charAt(0)==' ') c = c.substring(1,c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
        }
        return null;
    }
// Получение
if (get_cookie('имякуки')){...}
//или чтение...
var cook = readCookie('имякуки');
if (cook === 'значение') {...}
avatar
думаю проще, но в целом ничего не изменит…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.