ajax(PHP和Javascript)的问题 - 如何正确传输


Trouble with ajax (PHP and Javascript) - how to transfer properly?

我在jquery库中使用ajax函数时遇到了很大的麻烦。我是jQuery,ajax和php的完全初学者,但我正在研究这个学校项目,这应该是一个游戏(有点),页面创建一个10x10的表格,用数字填充它并自动选择一个单元格,然后用户可以猜测它是哪个单元格。

在桌子下面,有一个文本区域,我应该在其中输出游戏的进度;例如,"猜错了!猜测次数:1;到正确单元格的距离:3"等...

问题出在执行上;我有两个.php文件,一个是玩游戏的主站点,另一个是统计部分(只是数学之类的)。

事不宜迟,这是我的代码:

在其中玩游戏的主.php文件的代码:

<script>
   $(document).ready(function()
   {
        $("#tablezz td").click(function() 
        {    
            var column_num = parseInt( $(this).index() );
            var row_num = parseInt( $(this).parent().index() );   
            var dat = { column: column_num, row: row_num };
            $.ajax({
                    type: "GET",
                    data: dat,
                    url: "preveri.php",//this is the name of the mathemathical .php file
                    success: function(data){
                        $("#imamonkey").prepend(data);
                    }
            })
        });
    });
</script>
</head>
<body>
    <?php
    echo "<table id='tablezz' border='1'>";
    $counter=1;
    for($i=0; $i<10; $i++){
        echo"<tr>";
        for($j=0; $j<10; $j++){
            echo "<td> $counter </td>"    ;
            $counter=$counter+1;
        }
    }
    echo"</tr>";
    echo "</table>";
    session_start();
    $_SESSION["rightx"] = rand(1,10);
    $_SESSION["righty"] = rand(1,10);
    echo"<br>
    <br>
    <textarea id='imamonkey' rows='30' cols='46'></textarea>";
    ?>
</body>

以及另一个数学.php文件的代码;

<?php
$distance=sqrt((($_GET["column"] - $_SESSION["rightx"]) * ($_GET["column"] - $_SESSION["rightx"])) + (($_GET["row"] - $_SESSION["righty"]) * ($_GET["row"] - $_SESSION["righty"])));
if(isset($_SESSION["tries"])) {
$_SESSION["tries"]=$_SESSION["tries"]+1;    
}
else {
$_SESSION["tries"]=1;
}

if($_SESSION["rightx"]==$_GET["column"] && $_SESSION["righty"]==$_GET["row"]) { 
echo "Gooes guess. This took you $_SESSION['tries'] tries." 
}
else {
echo "Bad call! The distance to the right cell is: $distance . So far you've tried $_SESSION['tries'] times.";
}
?>

唯一的问题是,我的ajax函数显然无法正常工作。当我单击<td>单元格进行测试时,它会在文本区域中插入空白内容。我一定对数据和数据做错了什么,但我完全不知道它会是什么。例如,如何让它插入来自其他.php文件的回声?

非常感谢任何帮助,因为我完全不知道我做错了什么。提前感谢,BG

在 AJAX 调用中,您尝试将数据附加到文本区域:

$("#imamonkey").prepend(data);

这意味着数据放置在 DOM 中的文本区域之前(如果您在浏览器控制台中查看更新的信息,您实际上可以看到数据)。您要做的是将数据放在文本区域中:

 $("#imamonkey").val(data);

在 PHP 文件中,您需要将session_start();添加到文件开头以及您希望在其中使用会话数据的任何文件(例如 HTML 文件)。

您的代码中有以下错误:

  1. 会话必须从头开始。
  2. 修复了语法错误。
  3. 此外,会话必须在第二页开始。

尝试以下脚本:

<?php
session_start();
?>
<html>
<head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script>
   $(document).ready(function()
   {
        $("#tablezz td").click(function() 
        {    
            var column_num = parseInt( $(this).index() );
            var row_num = parseInt( $(this).parent().index() );   
            var dat = { column: column_num, row: row_num };
            $.ajax({
                    type: "GET",
                    data: dat,
                    url: "preveri.php",//this is the name of the mathemathical .php file
                    success: function(data){
                        $("#imamonkey").prepend(data);
                    }
            })
        });
    });
</script>
</head>
<body>
    <?php
    echo "<table id='tablezz' border='1'>";
    $counter=1;
    for($i=0; $i<10; $i++){
        echo"<tr>";
        for($j=0; $j<10; $j++){
            echo "<td> $counter </td>"    ;
            $counter=$counter+1;
        }
    }
    echo"</tr>";
    echo "</table>";
    $_SESSION["rightx"] = rand(1,10);
    $_SESSION["righty"] = rand(1,10);
    echo"<br>
    <br>
    <textarea id='imamonkey' rows='30' cols='46'></textarea>";
    ?>
</body>
</html>

第二页:

<?php
session_start();
$distance=sqrt((($_GET["column"] - $_SESSION["rightx"]) * ($_GET["column"] - $_SESSION["rightx"])) + (($_GET["row"] - $_SESSION["righty"]) * ($_GET["row"] - $_SESSION["righty"])));
if(isset($_SESSION["tries"])) {
    $_SESSION["tries"]=$_SESSION["tries"]+1;
}
else {
    $_SESSION["tries"]=1;
}
if($_SESSION["rightx"]==$_GET["column"] && $_SESSION["righty"]==$_GET["row"]) {
    echo "Gooes guess. This took you ".$_SESSION['tries']." tries." ;
}
else {
    echo "Bad call! The distance to the right cell is: ".$distance." . So far you've tried ".$_SESSION['tries']." times.";
}
?>