Jquery + ajax.我的javascript函数有什么问题?删除记录,添加记录而不刷新

jquery + ajax. what is wrong in my javascript function? delete record, add record without refreshing

本文关键字:记录 删除 添加 加记录 刷新 问题 我的 ajax javascript 函数 什么      更新时间:2023-09-26

我的JavaScript有什么问题?在不刷新页面的情况下添加一个记录,这是有问题的。

在一些有经验的用户的帮助下,我完成了完全删除。但是现在向数据库添加记录还不能工作

我想添加一个记录动态现在不刷新。删除功能运行良好,并反映在数据库中。

我将包括四个文件和我的数据库:

  • 文件是index.php为我的主
  • add.php添加记录
  • delete.php用于删除记录
  • dbconfig用于数据库连接和配置

index.php:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
     <title>title</title>
</head>
 <body>
 <?php
include("dbconfig.php");
$sql = "SELECT * FROM games";
$result = mysql_query($sql);
while ($record = mysql_fetch_array($result)){
  echo "<p class='"p" .$record['ID']. "'"></br> Game ID: " .$record['ID']. "</br> Game  Name: " .$record['Name'].
 "<br /> Game Type: ".$record['Type']. "<br /> Rating: ".$record['Rating']."<br /> Year  Released: ".$record['Release Year']."<br /> <br />" ?>
<a href="#" id="<?php echo $record["ID"]; ?>" class="deletebutton"><img src="trash.png" alt="delete"/> </a></p>
<?php
 }
?>
 <form name="add" id ="add" action=""  method="post">
 <input class ="gameID" type="hidden" id="ID" name="ID" value = " ' .$record['ID'] . ' " />
 <b>Game Name: </b> <input type="text" id="name" name="name" size=70>
 <b>Game Type:</b> <input type="text" id="type" name="type" size=40>
 <b>Rating: </b> <input type="number"  id="score"  name="score" min="1.0" max="10.0"  step ="0.1"/>
 <b>Year Released: </b> <input type="number"  min="1900" max="2011" id="Yreleased" name="Yreleased" value="1985" size=4>
 <p><input type="submit" name="Submit" id = "Submit" value="Add Game" class = "add games"></p>
 </form>
 <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
 <script type = "text/javascript">
  $(document).ready(function(){
        $("#add").submit(function(){

                        var name =    this['name'].value;
                        var type =    this['type'].value;
                        var rating =  this['score'].value;
                        var release = this['Yreleased'].value;
                        var dataString = 'name='+ name + '&type=' + type + '&rating=' + rating + '&release=' + release;
                    if (name == '' || type == '' || rating == '' || release == ''){
                        alert("please enter some valid data for your game entry");
                    }else
                    $.ajax({
                         type: "POST",
                         url: "add.php",
                         data: dataString,
                         success: function(){
                           window.location.reload(true);
                          $('.success').fadeIn(200).show();
                          $('.error').fadeOut(200).hide();
                         }
                    });
           return false;
        }
                                )});
        </script>
        <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
        <script type = "text/javascript">
         $(document).ready(function(){
        $("a.deletebutton").click(function(){
             var del_id = $(this).attr("id");
             var info = 'id=' + del_id;
             var parent = $(this).parent();
            if(confirm("Sure you want to delete this game? !..There is no Undo")){
                $.ajax({
                    type: "get",
                    url: "delete.php?" + info,
                    context: document.body,
                    success: function(){
                        $('.p'+del_id).html('deleted');
                        $('.success').fadeIn(200).show();
                    }
                });
            }
             return false;
     });
 });
 </script>
     </body>
 </html>

add.php:

<?php
    require('dbconfig.php'); //we cannot continue without this file, thats why using require instead of include
    if(isset($_POST['name']))
    {
    $name=addslashes($_POST['name']);
    $type=addslashes(($_POST['type']));
    $rating=addslashes($_POST['rating']);
    $release=addslashes($_POST['release']);
    $sql = 'INSERT INTO `games` (`Name`,`Type`,`Rating`,`Release Year`)  VALUES ("'.$name.'", "'.$type.'", "'.$rating.'", "'.$release.'")'; 
    mysql_query( $sql);
    if(!mysql_errno())
    echo " your game has been added to the list of games. ";
    }
?>

delete.php:

    <?php
    require('dbconfig.php'); //we cannot continue without this file, thats why using require instead of include
    if(isset($_GET['id']))
    {
        $id=(int)$_GET['id'];
        $sql = 'DELETE FROM `games` WHERE `ID`="'.$id.'" LIMIT 1';
        mysql_query( $sql);
        echo 'deleted';
    }
    ?>

dbconfig:

    <?php
    $user_name = "root";
    $password = "";
    $database = "gamebook";
    $server = "localhost";

    $bd = mysql_connect($server, $user_name, $password) or die ('I cannot connect to  the database because:' . mysql_error());
    mysql_select_db($database);
    ?>

如果需要,下面是我的数据库的模式:

    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";

    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    --
    -- Database: `gamebook`
    --
    CREATE DATABASE `gamebook` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
    USE `gamebook`;
    -- --------------------------------------------------------
    --
    -- Table structure for table `games`
    --
    CREATE TABLE IF NOT EXISTS `games` (
    `ID` int(4) NOT NULL AUTO_INCREMENT,
    `Name` varchar(70) COLLATE utf8_unicode_ci NOT NULL,
    `Type` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
    `Rating` float NOT NULL,
    `Release Year` int(4) NOT NULL,
    PRIMARY KEY (`ID`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;
    --
    -- Dumping data for table `games`
    --
    INSERT INTO `games` (`ID`, `Name`, `Type`, `Rating`, `Release Year`) VALUES
    (1, 'Battlefield 3', 'First Person Shooter', 8.5, 2011),
    (2, 'Fifa 12', 'Sports', 9.2, 2004),
    (3, 'Red Alert 3', 'Strategy ', 8.8, 2007),
    (4, 'Fight Night Round 4', 'Fighting', 9, 2010),
    (5, '', '', 0, 0),
    (6, '', '', 0, 0);
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

什么是错误的在我的javascript和什么是最好的方法来找出??

对于像我这样的初学者,你们推荐一个好的文本编辑器吗?

我马上注意到一些事情。

<标题> jQuery语法

首先,你的JavaScript语法是关闭的。在第一个文件(index.php)中有以下行:

 $("#add").load("add.php") {

这不是.load()方法的正确语法。基本上,你有这个:

$("#add").load("add.php") {
  // ... stuff to happen after add.php loads
}

应该拥有的是:

$("#add").load("add.php", function() {
  // .. stuff to happen after add.php loads
});

记住,你需要以回调的形式添加这个额外的功能,否则它将不起作用。

<标题>调用不一致

在我处理的第一个代码块中,看起来您正在尝试加载add.php,然后在加载后触发一些JavaScript命令。但是查看add.php文件的源代码,您不会希望这样做。您的add.php文件包含服务器端代码,用于处理向数据库添加记录…你不直接加载它,你只需要向它提交POST请求。

<标题>无效数据

您没有正确地将数据发送到服务器。使用add例程,首先创建一个数据字符串:

var dataString = 'ID=' + id 'name='+ name + '&username=' + type + '&password=' + rating + '&gender=' + release;

然后你通过AJAX将其发送到数据包中:

$.ajax({
    type: "POST",
    url: "add.php",
    data: dataString,
    success: function(){
        $('.success').fadeIn(200).show();
        $('.error').fadeOut(200).hide();
    }
});

这里的问题是双重的。首先,您没有正确编码数据。'ID=' + id 'name='缺少+字符,将中断。但是,即使修复了这个问题,您也会不正确地连接数据。您的dataString变量最终看起来像:

ID=1name=Bob&username=my_user&password=password&gender=male

你看你怎么少了一个&符号?这是一个容易犯的错误,所以发送一个data 对象。你不太可能遗漏字符:

$.ajax({
    type: "POST",
    url: "add.php",
    data: {
    },
    success: function(){
        $('.success').fadeIn(200).show();
        $('.error').fadeOut(200).hide();
    }
});
<标题> 数据不匹配

接下来,将数据传递给服务器,但要检查不同的值。你的JavaScript添加数据看起来像它想要发送:

  • ID
  • <
  • 名称/gh>
  • 用户名
  • 性别

但是你的add.php正在检查:

  • 提交
  • <
  • 名称/gh>
  • 得分
  • Yreleased
<标题>缺失数据

在delete例程中,您正在检查GET中的"ID"的值。这意味着该值需要作为附加到URL的查询参数传递。例如:delete.php?ID=5,删除ID为5的游戏。

在PHP中检查这个很好,但实际上并没有在AJAX请求中发送数据。你的代码应该看起来像这样:

$("a.deletebutton").click(function(){
    var del_id = $(this).attr("id");
    var info = 'id=' + del_id;
    var parent = $(this).parent();
    if(confirm("Sure you want to delete this game? !")){
        $.ajax({
            type: "get",
            url: "delete.php?" + info,
            context: document.body,
            success: function(){
                $('.p'+del_id).html('deleted');
            }
        });
    }
    return false;
});

url: "delete.php"变为url: "delete.php?" + info ?这将把您的ID附加到url,并使$_GET['id']在PHP中可用。

从第一眼看,我可以看出id没有作为参数传递给delete.php脚本。尝试将data: info添加到ajax调用中。这可能是让它工作的第一步。

我看到的另一个问题是$(this).attr("id")不会给你要删除的游戏id,而是按钮元素的id ("Submit")。相反,您应该使用$("#ID").val()从隐藏字段获取值。