Ajax Call with Post in PHP

Ajax Call with Post in PHP

本文关键字:in PHP Post with Call Ajax      更新时间:2023-09-26
<!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 上print_r它时,什么都不会出来。 这是为什么呢?

我正在这条线上做一个 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);
}

这将用POST请求中的数据填充div。 它显示为"无"的原因......,您没有使用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并执行查询。

你期望print_r的PHP结果在哪里"出来"?

尝试将 AJAX 调用更改为 this(只有 success 的值不同(:

$.ajax({
    url: "demo3.php",
    type: "POST",
    data: { items:list.join("::") },
    success: function(data, textStatus, jqXHR){
        alert(data);
    }
});

这样,PHP模板的输出,如果您以老式的方式(即使用表单和整页重新加载(发布到它,您通常会看到它,将显示在警报中。

希望有帮助。

尝试为 jQuery 部分添加 encodeURI,

$.ajax({
  url: "demo3.php",
  type: "POST",
  data: { items: encodeURIComponent (list.join("::")) },
  success: function(response) {
            console.log(response);
  }
});

和 PHP 部分的 urldecode:

$lis = $_POST['items'];
$liarray = explode("::", urldecode($lis));
print_r($liarray);

3 件事

设置 AJAX 的success以显示 PHP 脚本中给出的回显/打印

success: function(result)
{
    $("#somecontainer").html(result);
}

这样,任何以PHP脚本打印的内容都将被放入,即

<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"