3

我已经阅读了 jQuery.ajax 方法,并相信这应该是我需要的——但到目前为止还不能让它工作。

我用一个名为“users”的表创建了一个测试 mysql 数据库,在该表中添加了“name”和“location”的行,然后确保我可以使用命令行将数据保存到它,我可以。然后我制作了一个带有按钮的测试页面并将这个副本添加到我的脚本文件中($.ajax 部分直接来自 jQuery api 示例):

$('#button').click(function(){
    saveData();
});

function saveData(){  
$.ajax({
       type: "POST",
   url: "process.php",
   data: { name: "John", location: "Boston" }
    }).done(function( msg ) {
 alert( "Data was saved: " + msg );
    });
}

我确实收到了一条警报消息,“数据已保存”,但实际上没有任何内容保存到我的数据库中。我一定是对 process.php 做错了,但不确定是什么。这是 process.php 中的代码(我为数据库、db_host、用户等设置了变量,我没有在这里显示):

// 1. Create a connection to the server. 
$connection = mysql_connect($db_host, $db_user,$db_pwd);

// make sure a connection has been made
if (!$connection){
die("Database connection failed: " . mysql.error());
}

// 2. Select the database on the server
$db_select = mysql_select_db($database, $connection);
if (!$db_select){
die("Database selection failed: " . mysql.error());
}

// START FORM PROCESSING
if (isset($_POST['submit'])) { // Form has been submitted.
    $name = trim(mysql_prep($_POST['name']));
$location = trim(mysql_prep($_POST['location']));

// INSERT THE DATA 
$query = "INSERT INTO user ( name, location )
              VALUES ( '{$name}','{$location}' )";
        // Confirm if the query is successful.
        $result = mysql_query($query, $connection);
}
4

6 回答 6

3

其他人已经告诉过使用“成功”和“错误”这确实是捕获成功/错误回调的更好方法。但这并不是为什么没有插入任何内容的问题。除此之外,您的 Ajax 调用看起来还不错。

我看到的另一个问题是您只传递了以下参数:

data: { name: "John", location: "Boston" }

但是在您的 PHP 代码中,您会检查是否设置了提交按钮:

if (isset($_POST['submit']))

显然情况并非如此,因为发送的唯一内容是您在 Ajax 调用的“数据”属性中传递的内容。而是使用:

if ( $_SERVER['REQUEST_METHOD'] == 'POST' )
于 2012-05-14T13:42:41.107 回答
1

在这个例子中,$_POST['submit'] 没有设置,因为你没有像往常一样发送表单,你是用 ajax 发送数据并且没有任何名为“submit”的变量。

这可能会更好:

if ((isset($_POST['name'])) && (isset($_POST['location']))) { // Form has been submitted.
    $name = trim(mysql_prep($_POST['name']));
$location = trim(mysql_prep($_POST['location']));

// INSERT THE DATA 
$query = "INSERT INTO user ( name, location )
              VALUES ( '{$name}','{$location}' )";
        // Confirm if the query is successful.
        $result = mysql_query($query, $connection);
}
于 2012-05-14T13:40:30.590 回答
0

“完成”并不意味着“成功”。而不是 done:,使用它来查看它是否成功完成:

success: function(data)
    {
       alert(data);
    },
error:function (xhr, ajaxOptions, thrownError){
        alert("Error Status: " + xhr.status + " Thrown Errors: "+thrownError);
    }
于 2012-05-14T13:38:12.107 回答
0

所有这一切

.done(function( msg ) {
     alert( "Data was saved: " + msg );
});

告诉你的是ajax请求已经完成。你可能需要看看.success。此外,您的代码没有显示这一点,所以我假设它没有这样做,而是为了让msgphp需要任何东西来实际返回一些东西。(PHP人们帮我解决这个问题,我是一个.Net帮助解决这个问题的人JS:))

于 2012-05-14T13:39:49.360 回答
0

这是一个简单的错误。submit您在更新数据库之前检查它的存在时发布到 process.php 时离开了

$('#button').click(function(){
    saveData();
});

function saveData(){  
$.ajax({
       type: "POST",
   url: "process.php",
   data: { name: "John", location: "Boston",submit:"submit" }
    }).done(function( msg ) {
 alert( "Data was saved: " + msg );
    });
}
于 2012-05-14T13:40:06.777 回答
0

由于您不是通过传统表单提交,而是使用 ajax,我怀疑提交不是帖子的一部分。通过在您的代码中添加以下 else 子句来检查这一点。如果您正在点击该 die 语句,则删除 if 测试

if (isset($_POST['submit'])) { // Form has been submitted.
    $name = trim(mysql_prep($_POST['name']));
$location = trim(mysql_prep($_POST['location']));

// INSERT THE DATA 
$query = "INSERT INTO user ( name, location )
              VALUES ( '{$name}','{$location}' )";
        // Confirm if the query is successful.
        $result = mysql_query($query, $connection);
} else {
  die("$_POST['submit'] didn't exist");
}
于 2012-05-14T13:41:50.407 回答