Перейти к содержимому

Реферальная программа Мегаплана


Передача данных между PHP и JavaScript

#1 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0
0

Отправлено 10 Январь 2009 - 22:53

Каким образом осуществляется передача данных между этими языками и как можно обеспечит доступ до данных и БД динамически, не перезагружая страницу?(Через JavaScript или AJAX).

 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Передача данных между страницами.
  2. Как передаются данные между php и javascript
  3. Подключение внешнего JS-файла, сгенерированного с помощью PHP
  4. Как передать переменную из JS в PHP методом xhr.send() ?
  5. Как в javascript занести переменные из php

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Январь 2009 - 22:48

из PHP в JavaScript:
1) При формировании страницы можно присваивать JS переменным значения PHP переменных.
Пример:
......
<script type="text/javascript">

var param = <?php echo $param ?>; //JS переменная param получает значение PHP переменной $param

// Если Строка
var string = "<?php echo $string ?>";

//Если Массив
var array_array = new array(<?php implode(",", $array) ?>);

/*и так далее*/
</script>
.......


2) возвращаемые данные AJAX запроса. Можно вернуть просто текст, можно HTML, можно XML. Затем обработка с помощью JS ;)

3) Можно возвращать данные на основе AJAX в формате JSON
_http://ru.wikipedia.org/wiki/JSON
Очень удобная работа в JS

4)Передача данных по cookie. Но это очень примитивно и легко подменяемо.

из JavaScript в PHP:
1) Обычный POST или GET запрос в форме с скрытыми полями, значения присваиваются с помощью JS и форма отправляется на обработку PHP

2) С помощью AJAX запроса основанного на объекте xmlHttpRequest.
Данную тему рассматривали на форуме. Динамическое обновление. AJAX

как можно обеспечит доступ до данных и БД динамически, не перезагружая страницу?(Через JavaScript или AJAX).


JS - это клиентский, браузерный язык у него нет доступа к серверу, он работает на клиентской стороне, т.е. у пользователя на машине. Вывод одним JavaScript для динамического обновления не обойтись...
Нужно использовать Ajax в основе которого лежит объект JS xmlHttpRequest.

Вот возвращаем данные из БД с определённым ID

index.html
<html>
<head>
<script type="text/javascript" language="javascript">
function makeRequest(id_block) // функция Ajax запроса
{
var http_request = false; // переменная для хранения XMLHttpRequest объекта

if (window.XMLHttpRequest)
{
http_request = new XMLHttpRequest(); // Mozilla, Safari, ...
if (http_request.overrideMimeType)
{
http_request.overrideMimeType('text/html');
// Тип возвращаемого контента
}
}
else if (window.ActiveXObject)
{
try
{
http_request = new ActiveXObject("Msxml2.XMLHTTP"); // IE
} catch (e) {
try
{
http_request = new ActiveXObject("Microsoft.XMLHTTP"); // Opera
} catch (e) {}
}
}

if (!http_request) // Если объект не был создан
{
alert('Не вышло :( Невозможно создать экземпляр класса XMLHTTP ');
return false;
}

//присваеваем обработчику функцию для обработки возвращенного контента
http_request.onreadystatechange = function() { alertContents(http_request); }; //функция - обвёртка
http_request.open('GET', "./file.php?id="+id_block, true); //метод запроса, URL, асинхронность
http_request.send(null);
}

function alertContents(http_request)
{

if (http_request.readyState == 4) //Если состояние запроса = "Выполнено"
{
if (http_request.status == 200) //Если всё прошло удачно
{
//присваиваем элементу DIV с id=ajax возвращенный контент
document.getElementById('ajax').innerHTML = http_request.responseText;
} else {
alert('С запросом возникла проблема.');
}
}
}
</script>
</head>
<body>
<input id="id_block" type="text" name="id"><br/>
<input type="botton" value="Выдать данные" onClick="makeRequest(getElementById('id_block').value)"><br/><br/>
<div id="ajax">Блок из базы</div>
</body>
</html>


file.php
/*Подключение к БД*/
..........................
if(isset($_GET['id']))
{
$query = "SELECT * FROM table WHERE id=".intval($_GET['id'])." LIMIT 1"; //Запрос к table
$res = mysql_query($query);
$array = mysql_fetch_array($res); //массив значений

//вывести $имя_миассива['имя_поля']
echo "pole1 = {$array['pole1']}, pole2 = {$array['pole2']}, ....., poleN = {$array['poleN']}";
}

  • 0

#3 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 12 Январь 2009 - 22:30

Я конечно почти ничего не понял, но буду пытаться разобраться. =)
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Январь 2009 - 22:55

Читай! Дописал комментарии!
  • 0

#5 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 20 Январь 2009 - 13:51

Хорошо. Спасибо. Я разберусь.
  • 0

#6 FordogeN

FordogeN
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0

Отправлено 28 Январь 2009 - 01:19

А все же я так и не понял - как сделать так, чтоб просто то, что внутри <div> или любого другого тега с подключенным скриптиком - просто обновилось... Как фрейм.
  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 28 Январь 2009 - 20:39

По какому либо событию в JS мы меняем контент в элементе, для этого у блочных элементов есть атрибут innerHTML
.....
<!-- СОБЫТИЕ ПРИ НАЖАТИИ НА КНОПКУ (onClick) -->
<input type="button" onClick="newContent();" value="заменить контент">

<!-- ТО В ЧЁМ ЗАМЕНЯЕМ -->
<div id="newBlock">старый контент</div>
....
<script type="text/javascript">
function newContent()
{
/* Переменная нового контента */
var content = "новый контент";

/* В переменную myElement заносим адрес нашего блока по id=newBlock*/
var myElement = document.getElementById("newBlock");

/* Меняем контент с помощью атрибута innerHTML */
myElement.innerHTML = content;
}
</script>
....


Если что-то не понятно, напиши что именно ;)
  • 0

#8 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 13 Февраль 2009 - 14:22

FordogeN
А ты скорее всего говоришь об AJAX. Javascript не обладает возможностью соединения с сервером. Работает только в браузере на компьютере.
  • 0

#9 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 13 Февраль 2009 - 19:41

gaaarfild, неправильно ты сформулировал. JavaScript хоть и работает на стороне клиента, но обращение к серверу при асинхронном(синхронном) запросе мы выполняем именно на основе него. Другое дело что работу с сервером, возвращение данных выполняет технология AJAX основанная на JavaScript и XML(хотя контент можно возвращать и просто текстом).
Поэтому фраза

Javascript не обладает возможностью соединения с сервером

Категорически не верна. В JavaScript есть такой объект как xmlHttpRequest, который имеет возможность выполнять запрос.
  • 0

#10 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 16 Февраль 2009 - 14:50

Все, заткнулся. =)
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru