1

register.php

$allCaps=array("img01.png", "img02.png", "img03.png"....);  // 20 images
shuffle($allCaps);  // this is critical point
$fiveCaps = array_slice($allCaps, 0, 5);

<td id="box01">
<?php
shuffle($fiveCaps);
echo "<img src=\"captcha/imgs/".$fiveCaps[0]."\">";
echo "<img src=\"captcha/imgs/".$fiveCaps[1]."\">";
... //all five images from $fiveCaps are placed here
?>  
</td>

<td id="box02">
<script type="text/javascript">
$("#box02").load("register.php #box01")
</script> </td>

box02 では、box01 と同じ画像 (シャッフルしただけ) が必要です (期待しています)。
しかし、box01 には存在しない別の画像が box02 に表示されます。
「critical_point_line」を削除すると、画像は両方のボックスで同じですが、もちろん、常に $allCaps の最初の 5 つの画像のみです。

4

3 に答える 3

1

PHP関数を使用するだけで何が問題になっていますか?

<?php
$allCaps=array("img01.png", "img02.png", "img03.png"....);  // 20 images
shuffle($allCaps);  // this is critical point
$fiveCaps = array_slice($allCaps, 0, 5);

function printRandom($caps)
{
  shuffle($caps);
  foreach($caps as $cap)
  {
    echo "<img src=\"captcha/imgs/".$cap."\">";
  }
}
?>     

<td id="box01">
<?php
   printRandom($fiveCaps);
?>  
</td>

<td id="box02">
<?php
   printRandom($fiveCaps);
?>  
</td>

コードの問題は、jQuery の selector を完全には理解していない可能性があることを示しています。次のコードを実行します。

$("#box02").load("register.php #box01")

の新しいインスタンスをロードせずregister.php、単純に#box1(PHP コードから#box02

変数をシャッフルして Javascript で出力したい場合は、PHP から Javascript に渡す方法を見つける必要があります。これを行う良い方法は、JSON (JavaScript Object Notation)を使用することです。

于 2012-08-14T09:11:33.140 に答える
1

なぜあなたはそれをシャッフルするためにjqueryを使用しているのですか、なぜこのようなものをまっすぐにしないのですか

    <td id="box-1">
        <?php $lista = shuffle($fivecaps);
            foreach($lista as &$imgcode){
                echo '<img src=\"captcha/imgs/"'.$imgcode.'"\">';
            }
        ?>
    </td>
    <td id="box-2">
        <?php $listb = shuffle($fivecaps);
            foreach($listb as &$imgcode){
                echo '<img src=\"captcha/imgs/"'.$imgcode.'"\">';
            }
        ?>
    </td>
于 2012-08-14T09:09:57.863 に答える
0
   <td id="box02">
    <!-- just leave this empty -->
   </td>

これを onload に配置します。

$("#box02").html($('#box1').html()); // <-- wouldn't this make it a lot easier?

にdiv が必要な場合box1box2、 から html をコピーしてみませんbox1か? これにより、より高速になり (サーバー呼び出しが 1 回少なくなります)、読みやすくなります。

于 2012-08-14T09:07:02.097 に答える