Ajax Call with Post в PHP

<!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); ?> 

Related of "Ajax Call with Post в PHP"

Это просто выстрел в темноте, учитывая ограниченную информацию, но, похоже, вы ожидаете, что что- то произойдет с данными, отправленными с сервера .. но вы буквально ничего не делаете с ним. При успехе у вас появляется предупреждение … и ничего больше.

Попытайтесь изменить свою запись успеха следующим образом:

 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"