Я пытаюсь передать переменную от моего кода javascript до кода PHP на стороне сервера. Я знаю, что это должно быть сделано через вызов ajax, который, я считаю, я сделал правильно, однако доступ к переменной, которую я передал из моего ajax в мой php, – это когда я сталкиваюсь с проблемами, поскольку я новичок в php. Вот мой код, который я имею до сих пор:
$(document).ready(function() { $(".clickable").click(function() { var userID = $(this).attr('id'); //alert($(this).attr('id')); $.ajax({ type: "POST", url: 'logtime.php', data: "userID=" + userID, success: function(data) { alert("success!"); } }); }); }); <?php //logtime.php $uid = isset($_POST['userID']); //rest of code that uses $uid ?>
Я пытаюсь передать переменную javascript «userID» в php ($ userID), однако я поступил не так, как только по дороге. Спасибо за помощь!
Передайте данные, подобные этому, на вызов ajax ( http://api.jquery.com/jQuery.ajax/ ):
data: { userID : userID }
И в вашем PHP сделайте так:
if(isset($_POST['userID'])) { $uid = $_POST['userID']; // Do whatever you want with the $uid }
isset()
функции isset()
– проверить, существует ли данная переменная, а не получать ее значение.
Поскольку вы не используете JSON в качестве типа данных без вашего вызова AJAX, я бы предположил, что вы не можете получить доступ к значению, потому что PHP, который вы дали, будет когда-либо истинным или ложным. isset
– это функция для проверки того, существует ли что-то и имеет значение, а не для доступа к значению.
Измените свой PHP следующим образом:
$uid = (isset($_POST['userID'])) ? $_POST['userID'] : 0;
Вышеуказанная строка проверяет, существует ли переменная post. Если он существует, он будет устанавливать $uid
равным размещенному значению. Если он не существует, он будет устанавливать $uid
равным 0.
Позже в вашем коде вы можете проверить значение $uid
и соответственно отреагировать
if($uid==0) { echo 'User ID not found'; }
Это сделает ваш код более читабельным, а также последует тому, что я считаю лучшим методом обработки данных в PHP.
Чтобы проверить, имеет ли переменная POST элемент с именем «userID», вам будет лучше использовать array_key_exists .., который фактически проверяет существование ключа массива, а не его значение было установлено .. тонкая и, вероятно, только семантическая разница, но это улучшает читаемость.
и прямо сейчас ваш $ uid устанавливается в логическое значение, зависящее от того, установлен ли $ __ POST ['userID'] или нет … Если я вспомню из памяти, вы можете попробовать …
$uid = (array_key_exists('userID', $_POST)?$_POST['userID']:'guest';
Затем вы можете использовать идентифицируемого пользователя «гость» и сделать код более читабельным 🙂
Другой момент re isset (), хотя он вряд ли применим в этом сценарии, стоит вспомнить, не хотите ли вы поймать позже … элемент массива может быть законно установлен в NULL … т.е. он может существовать , но пока еще не заселен, и это может быть допустимым, приемлемым и проверяемым условием. но :
a = array('one'=>1, 'two'=>null, 'three'=>3); isset(a['one']) == true isset(a['two']) == false array_key_exists(a['one']) == true array_key_exists(a['two']) == true
Bw уверен, что вы знаете, какую функцию вы хотите использовать для этой цели.
Кроме того, попробуйте удалить «данные» и сделать URL «logtime.php? UserID =» + userId
Мне больше нравится ответ Брайана, этот ответ объясняется только тем, что вы пытаетесь использовать синтаксис параметра URL в «data», и я хотел бы показать, где вы можете правильно использовать этот синтаксис.