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でprint_rを実行しようとしても、何も表示されません。何故ですか?

私はこの行で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 ObjectPDOとも呼ばれるのいずれかを使用して行われ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

3つのこと

successPHPスクリプトで指定されたエコー/プリントを表示するようにAJAXを設定します

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

そうすれば、最後の要素をポップする必要はありません。


3番目のポイント: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

print_rPHPの結果が「出てくる」と期待しているのはどこですか?

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 に答える
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 に答える