1

運が悪いので、2時間からこれを理解しようとしています。おそらくそれほど技術的ではありませんが、助けが必要です!

同じページにあるphpスクリプトにGETリクエストを送信する必要があるAJAXスクリプトがあります。PHPスクリプトは次のように終了します

      if ($success) {
        print( $state );
      }?>

Javascript は php ターミネーションのすぐ下にあり、これです。

<script>
  $('table button').click( function() {
    var button = $(this);
    /* if button inside the table is clicked */
    var username = button.parent().parent().children('td').html();
    var state = button.html();

    /* send GET request */
    $.ajax({
      type: "GET",
      url: 'index.php',
      data: 'username='+username+'&state='+state,
      success: function(response) {
        alert(response);
      }
    });
  });
</script>

理解できないのは、なぜこのテキストを含むアラートが表示されるのかということです

inside // this is the state, so it's good
<script> // this is the script, not good
  $('table button').click( function() {
    var button = $(this);
    /* if button inside the table is clicked */
    var username = button.parent().parent().children('td').html();
    var state = button.html();

    /* send GET request */
    $.ajax({
      type: "GET",
      url: 'index.php',
      data: 'username='+username+'&state='+state,
      success: function(response) {
        alert(response);
      }
    });
  });
</script>

PHPコードから得られる厄介な応答のために、それを行うことができないため、成功時にHTMLを操作する必要があります。他のコードを投稿する必要があるかどうかはわかりません。もっと詳しく知りたい場合は、質問してください。できるだけ早く返信します。

4

2 に答える 2

4

タグ外の文字<?php ?>はすべて応答で返されます。<script>これがブラウザから index.php にアクセスしたときに最初にそのタグを取得する方法です。

echo と print も明らかにデータを送信します。

したがってif($success)、index.php の先頭とexit;その内部のprint.

タグ外の文字<?php ?>は、歴史的および実用的な理由から、応答の一部として送信されます。今日では、PHP コードと HTML を混在させることは悪い習慣です (以下のコメントですでに指摘されているように)。テンプレート エンジン (ほとんどの人は Smarty について知っています) を使用するか、PHP 自体をテンプレート エンジンとして使用します。しかし、「昔」の PHP は単純なテンプレート エンジン (クラス、外部モジュール、名前空間、オートローダーなどはありません) として始まったので、基本的に HTML と PHP を組み合わせることがこの言語の目的でした。前述したように、現在でも PHP をテンプレート言語として使用しているため、PHP (制御構造、ループ) と HTML を混在させることができます。

于 2013-08-24T14:29:02.030 に答える
2

簡単ではあるが推奨されない修正方法は、ajax リクエストで JavaScript コンテンツを回避することです。

それがどのようにできるかを実証するだけで、

if($success) {
    print( $state );
  }

if(!isset($_GET['ajax_call']))
{ ?>
  <script>
  $('table button').click( function() {
  var button = $(this);
  /* if button inside the table is clicked */
  var username = button.parent().parent().children('td').html();
  var state = button.html();

/* send GET request */
$.ajax({
  type: "GET",
  url: 'index.php?ajax_call=1',
  data: 'username='+username+'&state='+state,
  success: function(response) {
    alert(response);
  }
});
});
  </script>
<?php
}?>

.....

新しい ajax 呼び出しには追加の変数 ajax_call があることに注意してください。

これは先に進むための簡単な修正ですが、MVC フレームワークを使用することをお勧めします。

于 2013-08-24T15:11:42.483 に答える