2012-08-02 55 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