【问题标题】:Trouble with ajax (PHP and Javascript) - how to transfer properly?ajax(PHP 和 Javascript)的问题 - 如何正确传输?
【发布时间】:2016-01-20 13:22:10
【问题描述】:

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

桌子下面有一个textarea,我应该在里面输出游戏的进度;例如,“猜错了!猜的次数: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 函数显然不能正常工作。当我单击&lt;td&gt; 单元格对其进行测试时,它会将空白内容插入到文本区域中。我一定是对数据和 dat 做错了什么,但我完全不知道它会是什么。例如,如何让它插入来自其他 .php 文件的回声?

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

【问题讨论】:

  • 你看过浏览器控制台中的AJAX请求/响应吗?
  • 不,我该怎么做?我正在使用谷歌浏览器。 (抱歉有点网络编程的新手)
  • F12将显示有关您的浏览器的各种数据,包括请求、响应、连接等。

标签: javascript php jquery ajax get


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    您的代码中有以下错误:

    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.";
    }
    ?>
    

    【讨论】:

    • 非常感谢您对 AnkiiG 的帮助。 :) 然而可悲的是,这并没有解决任何问题;我之前从未遇到任何语法错误,或任何未定义的变量(或错误的会话开始),所以我认为这不是问题。还有什么其他想法可能导致这种情况吗?
    猜你喜欢
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    相关资源
    最近更新 更多