Передача переменной js в переменную php

#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>