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

    ?>
4

4 回答 4

2

鉴于信息有限,这只是在黑暗中拍摄,但您似乎期望从服务器发回的数据会发生一些事情..但您实际上什么也没做成功后,它会显示一个警报……没有别的了。

尝试将您的成功条目更改为以下内容:

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并执行查询。

于 2012-08-02T01:11:14.730 回答
0

尝试为 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);
于 2012-08-02T01:27:11.943 回答
0

3件事

设置您的 AJAXsuccess以显示 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"

于 2012-08-02T07:04:57.970 回答
0

您期望 PHP 结果在哪里print_r“出来”?

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

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

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

希望有帮助。

于 2012-08-02T01:10:54.907 回答