2012-08-02 97 views
2

在我的代码,我有这个回调PHP压倒一切AJAX POST请求

$('#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 [“项目”(这是在AJAX请求,每次一个新标签创建被添加)正在擦除或删除POST全局数组中。因此将我的$ _POST全局数组留空。

无论如何我可以合并这两个?或者反正不要让PHP覆盖或删除$_POST['items']?因为我将需要的物品为我的查询

而且我使用了一个名为TAG-IT

插件,如果你们有兴趣,这里是我整个代码

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

这里是dostuff。 php

<?php 

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

PHP不会“覆盖”$ _POST。你得到的$ _POST是PHP收到的。如果$ _POST为空,那么你没有发送任何东西,或者它的格式不正确。 – 2012-08-02 04:38:25

+0

哦,我明白了。我将如何合并PHP收到的由ajax和POST发出的POST请求?因为我会需要他们两个。 – user962206 2012-08-02 04:39:26

+2

这没有任何意义。你问:“我现在的奶奶发送的礼物和我从奶奶收到的礼物怎么合并?”?除非你的代码被占用,否则你的JS代码会发起一个SINGLE http请求,执行一个SINGLE POST到你的服务器端PHP脚本。 – 2012-08-02 04:40:50

回答

4

PHP处理请求的方式是每个请求都与其他请求完全分开,这有时称为“无共享”体系结构。这就是从<form>demo3.php产生的请求不知道由ajax发送到dostuff.php的其他请求是这种分离的原因。这不一定是PHP特定的,这是因为底层的HTTP protocol是无状态的。

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

  1. itemName控制什么参数命名(默认为item
  2. fieldName控制什么在itemName现场被调用(默认为tags

如果你初始化你的插件像这样(demo无样式):

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

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

这是它应该如何显示在萤火虫的网络面板(不要介意demo4。

$('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 
    }); 
}); 

通过使用assignedTags方法(用jQuery UI的呼叫:如果你想要做手工,你可以挂接到submit事件的<form>这样的PHP不beeing有) shot of firebug net panel after hitting submit


模式),您可以获取标签名称,并在提交<form>之前简单地添加新的隐藏输入。像这样加入他们可能是一个坏主意,如果你可以包含任何可以想象的字符串,即使是::

在这个例子中,我为每个标签使用单独的输入,所以在你的demo3.php他们将作为一个数组到达(结束名称与[]使得PHP做到这一点)。

+0

哇,它确实添加标签!但它回应了这个“Array([0] => [object HTMLUListElement])” – user962206 2012-08-02 06:28:41

+0

我很困惑,这是什么回应? – complex857 2012-08-02 06:35:20

+0

在我提交表单之后,我在PHP r上使用了print_r。它显示了这个“Array([news_title] => [submit] => Post News [tags] => Array([0] => [object HTMLUListElement]))”如何显示[0] = [ object HTMLUListElement] – user962206 2012-08-02 06:42:02