Можно ли получить id
элемента в переменную PHP
?
Предположим, у меня есть несколько элементов с идентификаторами:
<span id="1" class="myElement"></span> <span id="2" class="myElement"></span>
Как это получить в PHP
переменной, чтобы отправить запрос. Полагаю, мне придется повторно отправить страницу, и все в порядке. Я хотел бы использовать POST. Могу ли я сделать что-то вроде:
<script language="JavaScript"> $(document).ready(function(){ $(".myElement").click(function() { $.post("'.$_SERVER['REQUEST_URI'].'", { id: $(this).attr("id") }); }); }); </script>
Мне нужно передать $(this).attr('id')
в $newID
для запуска
SELECT * from t1 WHERE id = $newID
jQuery
– очень мощный инструмент, и я хотел бы выяснить способ объединения его мощности с серверным кодом.
Благодарю.
Это похоже на ваш вопрос: сообщение ajax с jQuery
Если вы хотите, чтобы все это в одном файле (отправка в активный файл), вот что вам нужно в целом:
<?php // Place this at the top of your file if (isset($_POST['id'])) { $newID = $_POST['id']; // You need to sanitize this before using in a query // Perform some db queries, etc here // Format a desired response (text, html, etc) $response = 'Format a response here'; // This will return your formatted response to the $.post() call in jQuery return print_r($response); } ?> <script type='text/javascript'> $(document).ready(function() { $('.myElement').click(function() { $.post(location.href, { id: $(this).attr('id') }, function(response) { // Inserts your chosen response into the page in 'response-content' DIV $('#response-content').html(response); // Can also use .text(), .append(), etc }); }); }); </script> <span id="1" class="myElement"></span> <span id="2" class="myElement"></span> <div id='response-content'></div>
Отсюда вы можете настроить запросы и ответ и что вы хотели бы сделать с ответом.
У меня есть два «хороших» выбора.
Первый – инициировать почтовый запрос каждый раз при изменении заказа. Вы можете изменить порядок, используя jQuery UI sortable . Большинство библиотек, поддерживающих перетаскивание и перетаскивание, также позволяют поместить обратный вызов события при переходе просто в функции инициализации.
В этом обратном вызове вы должны инициировать $.post
как вы его написали в своем коде (хотя я бы настоятельно рекомендовал вам просмотреть фактическую документацию по этому вопросу, чтобы убедиться, что вы отправили POSTing в нужное место).
Вторая стратегия заключается в контрейлеризации при подаче формы. Если вы используете JQuery Form Plugin для обработки ваших представлений форм, они позволяют указывать перед обратным вызовом сериализации, где вы можете просто добавить в свою форму поле, которое задает порядок элементов.
В обоих случаях вам нужно будет написать свою собственную функцию, которая фактически сериализует идентификаторы элементов. Что-то вроде следующего было бы просто отлично (полностью непроверено, может содержать синтаксические ошибки):
var order = []; $('span.myElement').each(function(){ // NB, "this" here is a DOM element, not a jQuery container order.push(this.id); }); return order.join(',');
Вы совершенно правы, что-то по этим линиям будет работать. Вот пример:
(Кстати, с использованием $.post
или $.get
не $.get
страницы, но отправляет запрос AJAX, который может вызывать функцию обратного вызова после возвращения сервера, что довольно аккуратно)
<script language="JavaScript"> $(document).ready(function(){ $(".myElement").click(function() { $.post(document.location, { id: $(this).attr("id") }, function (data) { // say data will be some new HTML the server sends our way // update some component on the page with contents representing the element with that new id $('div#someContentSpace').html(data); }); }); }); </script>
Ваш подход выглядит отлично для меня, но jQuery не имеет переменной $ _SERVER, как это делает PHP. URL-адрес, который вы хотели бы предоставить, будет window.location
(я считаю, что пустая строка также будет работать, или вы можете просто указать URL-адрес самостоятельно). Кажется, вы просто отправляете идентификатор, так что это сработает.
Если вы хотите, чтобы страница реагировала на это изменение, вы можете добавить функцию обратного вызова в $.post()
. Вы можете делать множество вещей.
$.post(window.location, {id: this.id}, function (data) { //one location.reload(); //two $("#responsedata").html(data); //three $("#responsedata").load("affected_page.php #output"); });
Я думаю, что номер 2 является самым элегантным. Он не требует перезагрузки страницы. Попросите свой php-скрипт на стороне сервера повторить все данные, которые вы хотите вернуть (json, html, что угодно), и он будет помещен в data
выше для jQuery для обработки, как вам угодно.
Кстати, на стороне сервера, выполняющей запрос, не забывайте дезинфицировать $ id и помещать его в кавычки. Вы не хотите, чтобы кто-то SQL вводил вас.