<!doctype html> <html> <head> <title>jQuery Tagit Demo Page (HTML)</title> <script src="demo/js/jquery.1.7.2.min.js"></script> <script src="demo/js/jquery-ui.1.8.20.min.js"></script> <script src="js/tagit.js"></script> <link rel="stylesheet" type="text/css" href="css/tagit-stylish-yellow.css"> <script> $(document).ready(function () { var list = new Array(); var availableTags = []; $('#demo2').tagit({tagSource:availableTags}); $('#demo2GetTags').click(function () { showTags($('#demo2').tagit('tags')) }); /* $('li[data-value]').each(function(){ alert($(this).data("value")); });*/ $('#demo2').click(function(){ $.ajax({ url: "demo3.php", type: "POST", data: { items:list.join("::") }, success: alert("OK") }); }); function showTags(tags) { console.log(tags); var string = ""; for (var i in tags){ string += tags[i].value+" "; } var list = string.split(" "); //The last element of the array contains " " list.pop(); } }); </script> </head> <body> <div id="wrap"> <?php $lis = $_POST['items']; $liarray = explode("::", $lis); print_r($liarray); ?> <div class="box"> <div class="note"> You can manually specify tags in your markup by adding <em>list items</em> to the unordered list! </div> <ul id="demo2" data-name="demo2"> <li data-value="here">here</li> <li data-value="are">are</li> <li data-value="some...">some</li> <!-- notice that this tag is setting a different value :) --> <li data-value="initial">initial</li> <li data-value="tags">tags</li> </ul> <div class="buttons"> <button id="demo2GetTags" value="Get Tags">Get Tags</button> <button id="demo2ResetTags" value="Reset Tags">Reset Tags</button> <button id="view-tags">View Tags on the console </button> </div> </div> </div> <script> </script> </body> </html>
Этот код просто перенесет список элементов в dostuff.php, но когда я попытаюсь напечатать его на PHP, ничего не выйдет. почему это?
Я делаю запрос ajax в этой строке
$('#demo2').click(function(){ $.ajax({ url: "demo3.php", type: "POST", data: { items:list.join("::") }, success: alert("OK") }); });
и код в PHP
<?php $lis = $_POST['items']; $liarray = explode("::", $lis); print_r($liarray); ?>
Это просто выстрел в темноте, учитывая ограниченную информацию, но, похоже, вы ожидаете, что что- то произойдет с данными, отправленными с сервера .. но вы буквально ничего не делаете с ним. При успехе у вас появляется предупреждение … и ничего больше.
Попытайтесь изменить свою запись успеха следующим образом:
success: function(data) { $("#wrap").html(data); }
Это заполнит div данными из запроса POST
. Причина, по которой это проявляется, как ничто иное …, вы не загружаете текущую исполняемую страницу данными, необходимыми для print_r
чтобы фактически что-либо повторять.
Изменить : как вставить значения в базу данных;
Взаимодействие с базой данных в настоящее время выполняется либо с помощью пользовательских оболочек, либо с помощью php Data Object
, также называемого PDO, в отличие от устаревших функций mysql_*
.
Во-первых, вы создаете свой объект базы данных, аналогично тому, как соединение выполняется в вышеупомянутых устаревших функциях:
$dbh = new PDO("mysql:host=hostname;dbname=database", $username, $password);
Затем вы можете начать взаимодействие, подготовив запрос.
$stmt = $dbh->prepare("UPDATE table_name SET column1 = :column1 WHERE id = :id");
Связывание параметра в указанном утверждении.
$stmt->bindParam(':column1', $column1); $stmt->bindParam(':id', $id); $id = $_POST['id'];
И, наконец, выполнение запроса:
try { $stmt->execute(); } catch (Exception $e) { echo $e; }
PDO автоматически запускает любые строки, связанные с предыдущими инструкциями, что позволяет сохранить атаки SQL-инъекций и ускоряет процесс множественных исполнений. Возьмем следующий пример:
foreach ($_POST as $id) { $stmt->execute(); }
Поскольку параметр id уже привязан к $id
, все, что вам нужно сделать, это изменить $id
и выполнить запрос.
Где вы ожидаете, что результат PHP print_r
«выйдет»?
Попробуйте изменить свой вызов AJAX на это (только значение success
отличается):
$.ajax({ url: "demo3.php", type: "POST", data: { items:list.join("::") }, success: function(data, textStatus, jqXHR){ alert(data); } });
При этом вывод вашего шаблона PHP, который вы обычно видите, если вы отправили на него старомодный способ (т. Е. С формой и полной перезагрузкой страницы), будет отображаться в предупреждении.
Надеюсь, это поможет.
Попробуйте добавить encodeURI для части jQuery,
$.ajax({ url: "demo3.php", type: "POST", data: { items: encodeURIComponent (list.join("::")) }, success: function(response) { console.log(response); } });
И urldecode для части PHP:
$lis = $_POST['items']; $liarray = explode("::", urldecode($lis)); print_r($liarray);
3 вещи :
Задайте свой success
AJAX, чтобы показать эхо / отпечатки, указанные в вашем скрипте PHP
success: function(result) { $("#somecontainer").html(result); }
Таким образом, НИЧЕГО, которое печатается в PHP-скрипте иначе, будет помещено в ie
<div id="somecontainer"> Result of PHPcode here </div>
Во-вторых, вместо
var string = ""; for (var i in tags) { string += tags[i].value+" "; } var list = string.split(" "); //The last element of the array contains " " list.pop();
используйте push()
. Это добавляет значение в следующем незанятом индексе в массиве:
var string = ""; for (var i in tags) { list.push(tags[i].value); }
Таким образом, вам не нужно выталкивать последний элемент.
Третий пункт: добавьте ваш PHP-код в отдельный файл (и ваш JavaScript / jQuery). Имейте:
/root/index.html /root/script/dostuff.php /root/script/myscript.js
затем позвольте вашему AJAX позвонить по url: "/script/dostuff.php"