Передача значения переменной из JavaScript в PHP

igortik

Новичок
Передача значения переменной из JavaScript в PHP

Задача:

При выводе из базы PHP формирует N-количество ссылок.
Все из них прописываются в виде:
- <a href="#" id="
PHP:
<?php echo $id ?>
">Ссылка
PHP:
<?php echo $id ?>
</a>
- <a href="#" id="
PHP:
<?php echo $id ?>
">Ссылка
PHP:
<?php echo $id ?>
</a>
и т.д. ......................

Далее мне необходимо, чтобы при нажатии на каждую отдельную ссылку значение <script ....> var link = '';</script> было уникальным для каждого линка,
т.е. в ПХП это реализуется через ГЕТ запрос, в моем же случае у ссылки есть всего лишь id но value отсутствует.

Может плохо разяснил проблему, поясню что хочу на выходе:

У меня есть функция JS, которая делает запрос на открытие некого файла php, который в зависимости от значения переменной функции делает разные действия (через switch).
Так вот как мне сделать так, чтобы при нажатии на ссылку у меня менялось значение переменной, которая в следствии обрабатывается в JS-функции?

Т.е., к примеру, я делаю меню на AJAX. Как передать 1 параметр я могу понять, а вот как сделать нечто ГЕТ запроса в ПХП для JS, чтобы передать JS-функции уникальное значение я не имею понятия.
 

igortik

Новичок
При чем здесь это?
Вопрос касается исключительно JS.

Мне необходимо нечто onClick на ссылке, чтобы переменной, которая находится в функции JS было присвоено уникальное значение.

AJAX, а не простая перезагрузка страницы, когда я могу передать Бог весть куда через echo значения переменных.


P.S.

var req = new Request.HTML({url:path+'form.php?act=addfile',
onSuccess: function(html) {}

Вот там где идет act= нужно вставлять новое значение без перезагрузки страницы (т.е. это по нажатии на ссылку туда должно устанавливаться новое значение)

-~{}~ 04.10.08 21:36:

проще сказать, мне необходимо понять, как отлавливать значения переменных по нажатии на ссылку, ссылка повторюсь обрабатывается JS а не PHP.

В пхп это реализовано через GET
 

Фанат

oncle terrible
Команда форума
при том, что ты не умеешь задавать вопрорсы
"как отловить значение" и "как сформировать строку запроса" - это не "передача значения переменной из JavaScript в PHP"

-~{}~ 04.10.08 22:09:

функцию свою по какому событию запускаешь?
 

AmdY

Пью пиво
Команда форума
блин, когда научатся нормально ajax прикручивать <a href="http://site.ru/script.php?id=<?php echo $id ?>" id="<?php echo $id ?>" onclick="doAjax(this.href);return false;">Ссылка <?php echo $id ?> </a>
нафига пробелы в id=" <?php echo $id ?> "
 

igortik

Новичок
Мне действительно сложно задать вопрос.

*****, я хочу реализовать нечто onClick, чтобы при этом переменной присваивалось значение id элемента, т.е.
<a href="#" id="1">link</a>

Ок, предположим, что сделаю нечто:
<a href="#" id="1" onClick="set_name('1')">link</a>

Функция set_name описана грандиозно:
set_name(name)
{
name = name;
}

Далее смотрим в js инклуд:

window.addEvent('domready', function() {

if (!window.path) window.path = '';
var path = window.path;

var req = new Request.HTML({url:path+'form.php?act='+name,
onSuccess: function(html) {

$('result').set('text', '');

$('result').adopt(html);
},

onFailure: function() {
$('result').set('text', 'Не выполнено');
}
});

$(name).addEvent('click', function() {
req.send();


});

});

Собственно, name я могу сменить налету, проверял через Alert(name).
А вот заставить работать как мне надо, чтобы click сработал на
url:path+'form.php?act='+name у меня не выходит.
 

dimagolov

Новичок
igortik, так надо наверное для того, чтобы выполнился ajax запрос его как-то запустить?

Код:
$(name).addEvent('click', function() {
req.send();
});
так ты вешаешь обработчик на элемент ссылка на который в переменной name которая ищется (и безуспешкно в контексте обработчика события ondomready в момент его исполнения (а не в момент собственно наджатия на что-либо). name в запросе у тебя тоже ищется так же безуспешно в том же контексте.
то есть у тебя 2 проблемы:
1. повесить обработчики на все нужные элементы
2. получить в них параметром id кликнутого объекта (не знаю какие в прототипе обвертки для источника события, я либ не юзаю и просто пишу event.srcElement || event.target) и этот id втулить в параметры объекта req.

п.с. а бред
Код:
<a href="#" id="1" onClick="set_name('1')">link</a>

Функция set_name описана грандиозно:
set_name(name)
{
name = name;
}
ты потри. потому что полный и никому не нужный бред это.

-~{}~ 04.10.08 16:38:

продолжаю убеждаться, что фреймворки вредны для начинающих программистов на JS. потому что начинают копипастить код из примеров нифига не понимая что там происходит и когда. можно писать код для web 2.0 сайтов и весьма успешно не зная толком даже синтаксиса JS, не говоря уже о DOM, прототипной модели и т.п. такой офигительно индуский код при этом выходит, что мама дорогая....
 

AmdY

Пью пиво
Команда форума
да, вот как должен выглядеть код в таком случае
PHP:
<a href="http://site.ru/script.php?id=<?php echo $id ?>" class="ajax">Ссылка <?php echo $id ?></a>
window.addEvent('domready', function() {
$("a.ajax").addEvent('click', function() {doAjax(this.href);return false;}
}
function doAjax(href) {
var req = new Request.HTML(href, 
onSuccess: function(html) {..},
}
ajax ссылкам присваиваешь класс, чтобы было удобнее выбирать, затем выбираем коллекцию элементов "а" с классом "ajax" и цепляем им функцию doAjax в которую передаём ссылку, в ней по этой сцылке делается запрос, возвращается false, чтобы ссылка не сработала.
всё, приложение будет даже отдавать контент поисковикам и народу без javascript
p.s. это похоже jquery я его не знаю и писал наугад, так что перепроверь
 

igortik

Новичок
ничего пока что не помогло.
еще больше запутался.

-~{}~ 05.10.08 00:49:

не хочу тратить Ваше время да и све жалко, но разобраться хочется.
В общем, теперь задача извне достать то, что будет лежать в переменной name и всунуть в

var req = new Request.HTML({urlath+'form.php?act='+name,
onSuccess: function(html) {

$('result').set('text', '');

$('result').adopt(html);
}

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

-~{}~ 05.10.08 01:05:

onClick="doAjax();" не срабатывает, происходит переход по ссылке указанной в href=""
 

Crys

Двинутый новичок
onClick="doAjax();" не срабатывает, происходит переход по ссылке указанной в href=""
Если должно срабатывать, но не срабатывает, значит где-то ошибка. Либо функция не определена, либо ошибка в ней..
Для браузеров существуют хорошие отладчики javascript. Для Firefox - Firebug, для IE - Visual Studio
Все это там можно проверить.

В общем, теперь задача извне достать то, что будет лежать в переменной name и всунуть в
Описывайте цель, а не отдельный шаг
ну и так далее...
 

igortik

Новичок
Задача:
Меню на AJAX

Вид меню:

- Пункт 1
- Пункт 2
... и т.д.

Функциональность:
1) Нажимаем на линк
2) Без перезагрузки страницы в <div id="result"></div>
происходит выборка из базы данных информации, которая соответствует имени пункта (имя пункта = $row['name'])
 

AmdY

Пью пиво
Команда форума
Crys
либо у человека отклучен javascript, либо это поисковик.
igortik
кажется я уже всё расписал или ещё что-то непонятно.
 

Фанат

oncle terrible
Команда форума
такие вещи, как новая, неизвестная тебе технология, изучают не по двум вопросам на форуме, а читая статьи и выполняя тестовые примеры.

А для меню аякс - как для кресла реактивный двигатель.
 

igortik

Новичок
*****
Это я пояснил, чтобы было ясно, что мне необходимо реализовать.

Мне просто нужно научить обработчик подставлять в js-переменную name больше значений, чем 1, т.е. чтобы я мог ставить туда разные значения, чтобы в дальнейшем скрипт передал этот параметр PHP и всего-то.
С одним параметром у меня все отлично работает!
Я подставляю вместо name
(var req = new Request.HTML({urlath+'form.php?act='+name,
onSuccess: function(html) ...) необходимо мне значение и скрипт работает, но как быть, если я хочу, чтобы name значение менялось динамически, в зависимости от нажатой ссылки.

Т.е. по мере окончания выполнения PHP цикла и формирования страницы мы получаем ряд ссылок. Нажимая на любую из них передается разное значение js-переменной name и собственно все!
Повторюсь, что у меня уже все работает с одним значением. Я не имею понятия, как динамически научиться менять значение js-переменной name без перезагрузки страницы, т.е.
1) нажали на ссылку;
2) onClick выполнил нечто такое, что установит name иное значение
3) обработчик выдаст в <div></div> результат выполнения php-скрипта, работа которого зависит от значения, полученного js-скриптом его переменной name
 

Crys

Двинутый новичок
igortik

на будущее (из спецификации по html):

ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").
$row['name'] - это то, что ты использовал как ID?

-~{}~ 05.10.08 13:45:

1) нажали на ссылку;
onclick="doIT(this.id) id="any_id"
2) onClick выполнил нечто такое, что установит name иное значение
function doIT(name) {
alert(name);
alert(urlath+'form.php?act='+name);
....
}
3) обработчик выдаст в <div></div> результат выполнения php-скрипта, работа которого зависит от значения, полученного js-скриптом его переменной name
ну, тут уже ты вроде бы как разобрался...
 

igortik

Новичок
Crys
Да, спасибо, именно так, я так еще вчера пробовал.. ну почти так.
Вот теперь стоит вопрос куда вставить описание этой функции, если код выглядит так:

window.addEvent('domready', function() {
var req = new Request.HTML({url:'form.php?act=addfile',
onSuccess: function(html) {
//Clear the text currently inside the results div.
$('result').set('text', '');
//Inject the new DOM elements into the results div.
$('result').adopt(html);
},
//Our request will most likely succeed, but just in case, we'll add an
//onFailure method which will let the user know what happened.
onFailure: function() {
$('result').set('text', 'The request failed.');
}
});

$('request').addEvent('click', function() {req.send();});
});

Я использую mootools.
Этот код подгружается отдельным файлом через <script ..></script>
До этого грузится сам mootools.js

Я немного проще делал функцию вчера, делал так:
function doIT(name) {
var name = name;
alert(name);
//Проверяем установлена ли name
}
Вот только я без понятия, как прикрутить эту функцию к коду, который показал выше, т.к. действительно, функция помогает отследить нажатую ссылку и устанавливает значение name, о чем свидетельствует alert, вот только в сам обработчик значение переменной name не поступает.
Это и не удивительно, т.к. переменная name имеет локальный характер.

Вот теперь вопрос - как сделать так, чтобы приведенная Вами функция работала, учитывая, что я использую js-код, описанный выше.
 

Crys

Двинутый новичок
ты учишься или ищешь готовое решение?

-~{}~ 05.10.08 15:28:

В общем, лови.. изобретатель...
Код:
<script type="text/javascript" src="mootools.js"></script>
<script type="text/javascript">
function doIt(name) {
	$('content').load('form.php?act='+name);
}
</script>
<a href="#" onclick="doIt('id1');return false">link 1</a><br />
<div id="content"></div>
 

igortik

Новичок
Учусь на базе готовых решений!

По сути эти библиотеки - уже готовое решение.
Осталось только настроить работу под свои нужды.

-~{}~ 05.10.08 16:36:

Crys
Спасибо огромное!

Я потратил часов 7, просиживая за книгой и толку!

Хорошо, что есть такие люди!
Не лесть, действительно спасибо!

Для кого пустяк, а а столько времени потратил!
 
Сверху