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);
                    }
                });
            }
         });

タグを追加するたびに、新しく追加されたタグが配列にプッシュされ、その後、AJAXPOSTリクエストが作成されます。

そして、私はここにこれらのフィールドを持っています

<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グローバル配列は空のままにしておきます。

とにかく、これら2つをマージできますか?またはとにかく、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ライブラリには、次の2つの構成オプションによって制御される組み込みの方法があります。

  1. itemNameは、パラメータの名前を制御します(デフォルトはitem
  2. fieldNameは、getsのフィールドが呼び出される内容を制御しますitemName(デフォルトはtags

このようにプラグインを初期化する場合(スタイルなしのデモ):

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

次に、送信時に、phpに送信されるパラメーターがに含まれている必要があります。$_POST['article']['tags']生成されるパラメーター名はのようになりますarticle[tags][]。プラグインのデモをご覧ください。(ページソースには、適切にフォーマットされたjavasriptの例があります)。デフォルトで$('#tagList').tagit();は、余分なコールバックや設定をすべて行わずに呼び出すだけで機能するはずです。

これは、firebugのネットパネルに表示される方法です(demo4.phpがそこに表示されないことを気にしないでください) 送信を押した後のFirebugネットパネルのショット


手動で実行したい場合は、次のような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プラグインのassignedTagsメソッド(jquery ui呼び出しスキーマを使用)を使用すると、タグ名を取得し、を送信する直前に新しい非表示の入力を追加するだけ<form>です。このようにそれらを結合することは、想像できる任意の文字列を含めることができる場合は、悪い考えかもしれません::

この例では、タグごとに個別の入力を使用しているため、タグdemo3.phpは配列として到着します(名前の末尾をで終わると[]、phpがそれを実行します)。

于 2012-08-02T06:24:27.507 に答える