如何使用ajax json获取正确的错误消息

时间:2014-02-13 07:06:25

标签: javascript php jquery ajax json

这里我将跨度值存储到数据库中。它工作正常。我现在面临ajax返回错误消息的问题。例如,在我的save.php代码中,我将数据库表名sample更改为simple(我没有simple数据库表)。在主页中,我想得到“此simple数据库表名称不存在”的错误消息。 但它始终显示数据已成功保存。

我在其他一些网站上搜索过。有人说我应该用json来获取正确的错误信息。但是,我不知道该怎么做。如何使用json和ajax获取正确的错误消息?我觉得这很简单。但是,我是ajax的新手。

save.php

<?php
    include('config.php');
    $get = $_POST['content'];
    try
    {
        $stmt = $conn->prepare("INSERT INTO sample (divvalue) VALUES (?)"); 
        $conn->errorInfo();
        $stmt->bindParam('1', $get, PDO::PARAM_STR);
        $stmt->execute();
    }
    catch(PDOException $e)
    {
        'Error : ' .$e->getMessage();
    }
    if($stmt)
    {
        echo 1;
    }
?>

ajax.js

$(document).ready(function() {
  $("#save").click(function (e) {   
    var span_contents = $('#ele').html();
    $.ajax({
        url: 'save.php',
        type: 'POST',
        data: {
            content: span_contents
         },
      success: function(data){
            if(data == '1')
            {
                $('#status')
                .addClass('return')
                .html('Data saved succesfully')
                .fadeIn('fast')
                .delay(3000)
                .fadeOut('slow')
            }
            else
            {
                $('#status')
                .addClass('error')
                .html('Error occured')
                .fadeIn('fast')
                .delay(3000)
                .fadeOut('slow')
            }
        }   
     }); 
   });
});

mainpage.php

<span id="ele" class="ele" contenteditable >element</span>
<input type="button" id="save" value="save" />
<br />
<div id="status"></div>

6 个答案:

答案 0 :(得分:2)

在你的代码中我认为每次返回一个。在catch块中,您需要返回另一个值,如0。

try
{
    if($stmt){
        echo "1";
    }
}
catch(PDOException $e)
{
    echo 'Error : ' .$e->getMessage();
}

您还可以在ajax函数中添加错误处理程序,如

$.ajax({
    success: function(data){
        if(data == '1')
        {
            $('#status')
            .addClass('return')
            .html('Data saved succesfully')
            .fadeIn('fast')
            .delay(3000)
            .fadeOut('slow')
        }
        else
        {
            $('#status')
            .addClass('error')
            .html('Error occured')
            .fadeIn('fast')
            .delay(3000)
            .fadeOut('slow')
        }
    },
    //another handlers and properties
    error:function(error){
        $('#status')
        .addClass('error')
        .html('Error occured')
        .fadeIn('fast')
        .delay(3000)
        .fadeOut('slow')
    }
});

答案 1 :(得分:1)

您可以使用json数据

按以下方式执行此操作

PHP:

<?php
    include('config.php');
    $get = $_POST['content'];
    try
    {
        $stmt = $conn->prepare("INSERT INTO sample (divvalue) VALUES (?)"); 
        $conn->errorInfo();
        $stmt->bindParam('1', $get, PDO::PARAM_STR);
        $stmt->execute();
        if($stmt)
        {
            echo '{"status":1}';
        }
    }
    catch(PDOException $e)
    {
        echo '{"status":0,"Error" : "' .$e->getMessage().'"}';
    }

?>

JQUERY:

success: function(data){          
     $('#status')
        .addClass('return')
        .html(data.status?'Data saved succesfully':'Error'+data.Error)
        .fadeIn('fast')
        .delay(3000)
        .fadeOut('slow')          
},
dataType:'json'  

答案 2 :(得分:1)

请更新您的代码。这是你的PHP,它也需要在错误上回应。

<?php
    include('config.php');
    $get = $_POST['content'];
    try
    {
        $stmt = $conn->prepare("INSERT INTO sample (divvalue) VALUES (?)"); 
        $conn->errorInfo();
        $stmt->bindParam('1', $get, PDO::PARAM_STR);
        $stmt->execute();
    }
    catch(PDOException $e)
    {
        echo 'Error : ' .$e->getMessage();
    }
    if($stmt)
    {
        echo 1;
    }
?>

也在你的JavaScript中。

$(function() {
  $("#save").click(function (e) {   
    var span_contents = $('#ele').html();
    $.ajax({
        url: 'save.php',
        type: 'POST',
        data: {
            content: span_contents
         },
      error: function(data){//callback option is invoked, if the request fails.
            $('#status')
                .addClass('error')
                .html('Error occured')
                .fadeIn('fast')
                .delay(3000)
                .fadeOut('slow');
      },
      success: function(data){//callback option is invoked, if the request succeeds. 
            $('#status')
                .addClass('return')
                .html('Data saved succesfully')
                .fadeIn('fast')
                .delay(3000)
                .fadeOut('slow');
        }
     }); 
   });
});

答案 3 :(得分:0)

我认为

if($stmt)
{
    echo 1;
}

始终评估为true,尝试(测试)做回声“2”而不修改任何其他内容。 尝试在catch块中添加一个echo。 您还可以使用网络选项卡中的devTools检查响应返回的内容。

答案 4 :(得分:0)

请使用以下语法进行ajax调用:

$.ajax({
        url: 'save.php',
        type: 'POST',
        data: {
            content: span_contents
         },
      success: function(data){
            if(data == '1')
            {
                $('#status')
                .addClass('return')
                .html('Data saved succesfully')
                .fadeIn('fast')
                .delay(3000)
                .fadeOut('slow')
            },
     error: function(data){
            alert('Your error message here');
        }

       }); 

如果出现错误,将触发jquery ajax调用的错误回调

答案 5 :(得分:0)

一个好的标准方法是使用JSON,如下所示

catch
{
 echo {"status":"failure","message":"The Error message goes here"};
}
if($stmt)
{
 echo {"status":"success","message":"Data saved successfully"};
}

并在你的ajax成功函数中检查如下

  dataType:'json',
 success: function(data){
            if(data.status == 'success')
            {
                // do the required
            }
           else{
                // do the required
           }
  }

您可以根据需要添加更多变量,例如返回字符串

中的状态和消息