Как получить идентификатор элемента в переменной PHP

Можно ли получить 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 вводил вас.