У меня есть загрузочный навигатор на моем веб-сайте, в котором выпадающее меню заполнено некоторыми данными из базы данных.
Теперь, когда я нажимаю на эту ссылку, я хочу отправить эти данные в POST на мой контроллер. Это возможно ?
Это мое раскрывающееся меню:
<ul class="dropdown-menu"> <li><a href="#"> <?php foreach($sites as $site) { echo "<li>".$site->site_key."</li>"; } ?> </a></li> </ul>
Обновленный код:
<form id="hiddenForm" method="post" style="display: none"> <input name="linkAddress" value="<?php echo $site->site_key; ?>"> <input name="otherData" value=""> </form> <script> var specialLinks = document.getElementsByClassName("specialLink"); var hiddenForm = document.getElementById('hiddenForm'); Array.prototype.forEach.call(specialLinks, function(link) { link.onclick = function(event) { event.preventDefault(); var req = new XMLHttpRequest(); req.addEventListener('load', function() { var response = req.responseText; //Do something with response, like change a part of the page }); //Set the page to send the request to req.open('POST', 'recieve.php'); //Specify that we're using URL-encoded coded parameters req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //Send the URL-encoded POST data. req.send('linkAddress=' + link.href + '&otherData=' + someOtherData()); } </script>
после долгого обсуждения, вот я получаю то, что он хочет
так вот моя демонстрация на основе вашей проблемы
обратите внимание, что в этой демонстрации вам нужен последний jquery, см. внешний js
поэтому я изменяю ваш html, чтобы упростить
<ul class="dropdown-menu"> <a href="#" class="specialLink" id="54th-65hy"> <li>54th-65hy</li> </a> <a href="#" class="specialLink" id="HT45-YT6T"> <li>HT45-YT6T</li> </a> </ul>
Посмотрите, как я ставлю ваше значение как id
и это мой js
$( ".specialLink" ).click(function() { var value = this.id; //get value for throw to controller alert(value); $.ajax({ type: "POST", //send with post url: "<?php echo site_url('welcome/post) ?>", //for example of mine , using your controller data: "value=" + value, //assign the var here success: function(msg){ alert(msg); } }); });
см. id i save в переменную с именем, чтобы отправить на контроллер welcome / post
то это контроллер
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Welcome extends CI_Controller { public function index() { } public function post() { $value=$this->input->post('value'); echo $value; } }
чтобы вы знали ajax, просто прокомментируйте, что мой js в демо будет таким:
$( ".specialLink" ).click(function() { var value = this.id; //get value for throw to controller alert(value); $.ajax({ type: "POST", //send with post url: "<?php echo site_url('welcome/post) ?>", //for example of mine , using your controller data: "value=" + value, //assign the var here success: function(msg){ alert(msg); } }); });
Изменить: 1. заставить демонстрацию показать значение сначала после того, как вы его знаете, просто скопируйте и вставьте js в ответ на codepen 2. в контроллере demo i pust в js part 3. см. В js-файле демо-данные: «value = + значение,
Вы можете переопределить обычное поведение ссылки и вместо этого отправить POST при нажатии, а затем просто указать ссылку href в качестве параметра.
Самый простой способ отправить POST, вероятно, будет скрытой формой, установленной в POST, и просто программно установить поле формы, а затем отправить, когда кто-то щелкнет ссылку.
Я написал образец страницы, в которой используются оба варианта для отправки запроса:
<! DOCTYPE HTML> <html> <head> <title>Post Send Example</title> </head> <body> <!-- Place somewhere on your page if you're using the hidden form method: The display needs to be none so the form doesn't show. Ideally, this won't use inline styling, obviously.--> <form id="hiddenForm" method="post" action="receive.php" style="display: none"> <input name="linkAddress" value=""> <input name="otherData" value=""> </form> <!-- You could also programatically create the form using Javascript if you want --> <a class="specialLink" href="www.someaddress.com">A Link!</a> <a class="specialLink" href="www.someaddress.com/someSubPage">Another Link!</a> <script> var specialLinks = document.getElementsByClassName("specialLink"); var hiddenForm = document.getElementById('hiddenForm'); //If using a form, grab all links, and set the click handlers to fill // and submit the hidden form Array.prototype.forEach.call(specialLinks, function(link) { link.onclick = function(event) { //Prevent the link from causing navigation. event.preventDefault(); //Grab the link and other field var linkAddress = document.querySelector('#hiddenForm [name=linkAddress]'); var otherDataField = document.querySelector('#hiddenForm [name=otherData]'); //Set the form field to the link's address linkAddress.value = link.href; otherDataField.value = someOtherData(); hiddenForm.submit(); } }); //Or via AJAX, grab all links again, but create a AJAX request instead Array.prototype.forEach.call(specialLinks, function(link) { link.onclick = function(event) { event.preventDefault(); var req = new XMLHttpRequest(); req.addEventListener('load', function() { var response = req.responseText; //Do something with response, like change a part of the page }); //Set the page to send the request to req.open('POST', 'recieve.php'); //Specify that we're using URL-encoded coded parameters req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //Send the URL-encoded POST data. req.send('linkAddress=' + link.href + '&otherData=' + someOtherData()); } </script> </body> </html>
Имейте в виду, я только научился использовать форму месяц назад и AJAX таким образом всего пару дней назад. Хотя я знаю, что это работает, я не могу говорить о лучших практиках. Также обратите внимание: для краткости я не делаю никаких ошибок при обработке ошибок. В действительности, вы должны проверить код ответа запроса AJAX, чтобы убедиться, что он прошел правильно.
Вариант 1: создать форму для отправки данных через почту
<ul class="dropdown-menu"> <li><a href="#" onclick="form.submit();"> <?php foreach($sites as $site) { echo "<form action='index.php' method='POST'>"; echo "<input type='hidden' name='attribute' value='1'>"; echo "<li>".$site->site_key."</li>"; echo "</form>"; } ?> </a></li> </ul>