#php #javascript #ajax
#php #javascript #ajax
Вопрос:
Я хочу передать значение id тега, на который только что был нажат, в php-файл, который загружается на страницу с помощью greybox.
Я получил идентификатор, сохраненный в переменной js с именем LinkId, и я могу получить его, передав правильный идентификатор, используя location.href но для этого требуется перезагрузка страницы и не работает вместе с greybox. Могу ли и, возможно, как я могу использовать Ajax, чтобы помочь отправить эту информацию в фоновом режиме? Любая помощь была бы высоко оценена?
Javascript для получения идентификатора нажатого тега
<script type="text/javascript">
function myCallback(caller)
{
var linkID =caller.id;
location.href="species/butterfly.php?linkID=" linkID;
alert(linkID);
}
</script>
HTML-тег a в index.php
<div id="stump">
<a href="#" id="2" class="hedgehog descript" title="Hedgehog"
rel="gb_page_center[1020, 550]" onclick="myCallback(this)"></a>
</div><!--close stump div -->
The butterfly.php страница, которая пытается получить идентификатор
<?php
// Retrieve the URL variables (using PHP).
$linkid = $_GET['linkID'];
echo "Number: ".$linkid;
?>
Комментарии:
1. Это довольно классический вариант использования ajax. Используете ли вы библиотеку javascript, такую как jQuery или Prototype? Синтаксис вызова ajax будет отличаться в зависимости от библиотеки или от того, используете вы ее или нет.
2. Я использую как jquery, так и prototype для разных вещей, я убедился, что они не конфликтуют. Greybox использует prototype.js итак, это был бы этот вызов ajax. Спасибо за быстрый ответ
Ответ №1:
var myCallback = function(caller){
var linkID = caller.id;
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST","species/butterfly.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("linkID=" linkID;);
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 amp;amp; xmlhttp.status == 200){
alert("Request complete. Data: " xmlhttp.responseText);
}
};
alert(linkID);
}
Редактировать:
Чистый GreyBox:
var myCallback = function(caller){
var linkID = caller.id;
caller.href = "species/butterfly.php?linkID=" linkID;
}
Комментарии:
1. Я попробовал это, и я думаю, что это может сработать, однако каким бы способом вы написали, что <a href часть тега <a href=»#» заставляет ссылку ничего не делать? Также спасибо за ваш быстрый ответ
2. Нет проблем, используйте это:
onclick="myCallback(this); return false;"
илиvar myCallback function(caller){ /* other code */ return false; }
3. Нет, я действительно не уверен, что не так, если я оставлю href = «#», поскольку это просто загружает домашнюю страницу во всплывающей области greybox. Однако, если я введу href =»species/butterfly.php » здесь это приводит к butterfly.php страница, но запрос ajax, похоже, не был отправлен или получен, поскольку идентификатор не отображается. Если у вас есть какие-либо другие предложения, это было бы действительно полезно. Спасибо
4. Ну, GreyBox предназначен только для отображения страницы, определенной в
href=""
, какой другой результат вы ищете?5. о, точно, я не знал об этом! Я думаю, что, возможно, я делаю то, что я хочу сделать, более сложным, чем это должно быть. Что я хочу сделать, так это загрузить информацию из базы данных в этот серый ящик (butterfly.php ) где идентификатор, на который нажал пользователь, равен идентификатору в базе данных.
Ответ №2:
Это преобразует переменную js в переменную php
<script>
function sud(){
javavar=document.getElementById("text").value;
document.getElementById("rslt").innerHTML="<?php
$phpvar='" javavar "';
echo $phpvar.$phpvar;?>";
}
function sud2(){
document.getElementById("rslt2").innerHTML="<?php
echo $phpvar;?>";
}
</script>
<body>
<div id="rslt">
</div>
<div id="rslt2">
</div>
<input type="text" id="text" />
<button onClick="sud()" >Convert</button>
<button onClick="sud2()">Once Again</button>
</body>