2

在我的代码上我有这个回调

 $('#tagList').tagit({
            //Every new dag will be pushed in the list array
            tagsChanged: function(tagValue,action,element){
                list.push(tagValue);
                $.ajax({
                    url: "dostuff.php",
                    type: "POST",
                    data:{ items:list.join("::")},
                    success: function(data){
                        $('#wrap').append(data);
                    }
                });
            }
         });

每次我添加标签时,新添加的标签都会被推送到数组中,然后它会发出 AJAX 发布请求。

然后我在这里有这些领域

<form method = "POST" action = "demo3.php">
News Title <input id = "news_title" type = "text" name = "news_title" /><br>
    <label>Insert Some tags </label>
    <ul id="tagList" data-name="demo2">
    </ul>
        <input type = "submit" name = "submit" id = "submit" value = "Post News" />
</div>
</form>

当我单击提交(它基本上重新加载页面)时,$_POST['items'](这是在每次添加新标签时在 AJAX 请求上创建的)在 POST 全局数组中被删除或删除。因此将我的 $_POST 全局数组留空。

无论如何我可以合并这两个吗?或者无论如何不要让PHP覆盖或删除$_POST['items']?因为我需要查询项目

我也在使用一个名为 tagit 的插件

如果你们有兴趣这里是我的整个代码

<!doctype html>
<html>
<head>
  <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();
         $('#tagList').tagit({
            //Every new dag will be pushed in the list array
            tagsChanged: function(tagValue,action,element){
                list.push(tagValue);
                $.ajax({
                    url: "dostuff.php",
                    type: "POST",
                    data:{ items:list.join("::")},
                    success: function(data){
                        $('#wrap').append(data);
                    }
                });
            }
         });
    });
  </script>
</head>
<body>

<div id="wrap">
<div class="box">
<button class = "viewTags">View Tags</button>
<form method = "POST" action = "demo3.php">
News Title <input id = "news_title" type = "text" name = "news_title" /><br>
    <label>Insert Some tags </label>
    <ul id="tagList" data-name="demo2">
    </ul>
        <input type = "submit" name = "submit" id = "submit" value = "Post News" />
</div>
</form>
</div>
</body>
</html>

这是东西。php

 <?php 

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

1 回答 1

4

PHP 处理请求的方式是每个请求都与其他请求完全分离,这有时被称为无共享架构。这就是从<form>to生成的请求demo3.php不知道 ajax 发送到的其他请求的原因dostuff.php是这种分离。这不一定是特定于 php 的,这是因为底层HTTP 协议是无状态的。

如果您想在<form>提交时生成的请求中包含标签,您需要将这些值添加到表单中。为此,tagit 库有一个由两个配置选项控制的内置方式:

  1. itemName控制参数的名称(默认为item
  2. fieldName控制调用字段中的内容itemName(默认为tags

如果你像这样初始化你的插件(没有样式的演示):

$('#tagList').tagit({
    itemName: 'article',
    fieldName: 'tags'
});

然后在提交时,发送到 php 的参数应该是 in $_POST['article']['tags'],生成的参数名称看起来像article[tags][]. 请参阅插件的演示。(页面源有很好的格式化 javasript 示例)。默认情况下,只需调用$('#tagList').tagit();而无需所有额外的回调或配置即可。

这就是它应该如何显示在 firebug 的网络面板中(不要介意 demo4.php 不存在) 点击提交后萤火虫网面板的照片


如果您想手动执行此操作,您可以挂接到这样的submit事件<form>

$('form').on('submit', function(){
    var $form = $(this), 
        tags = $('#tagList').tagit('assignedTags'); // see the docs https://github.com/aehlke/tag-it/blob/master/README.markdown#assignedtags
    $.each(tags, function(i, tag){
        $('<input type="hidden" name="tags[]">').attr('value', tag).appendTo($form); // using jquery to create new elements
    });
});

通过使用tagit 插件的assignTags方法(使用 jquery ui 调用模式),您可以获得标签名称,并且只需在提交之前添加一个新的隐藏输入<form>。如果您甚至可以包含任何可以想象的字符串,那么像这样将它们连接在一起可能不是一个好主意::

在示例中,我为每个标签使用了单独的输入,因此demo3.php它们将作为数组到达(以[]使 php 结束名称)。

于 2012-08-02T06:24:27.507 回答