【问题标题】:ajax how to return an error message from a PHP fileajax 如何从 PHP 文件返回错误消息
【发布时间】:2020-03-12 21:05:08
【问题描述】:

当我将鼠标悬停在任何单词上时,总是会显示一个黑框。如果 PHP 代码返回文本,它会显示在黑框中(它应该如此)。但是,如果未返回文本,我希望它返回一个错误函数,以便稍后更改黑框的 CSS,使其宽度为 0px 而不是 400px

var x = ($(this).text());
$.ajax({
    type: 'POST',
    url: 'process.php',
    data: { text1: x },
    success: function(response){
        $('#tooltip').text(response);
    }
});
try 
{
    $db = new PDO('sqlite:ordbas.db');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
} catch(PDOException $err)
{
    echo "PDO fel $err";
}

if (isset($_POST['text1'])) {
    $text1 = $_POST['text1'];
    $results = $db->prepare("SELECT forord FROM words WHERE sokord='$text1'");
    $results->execute();
    $row = $results->fetch();
    echo $row[0];
}       

您可能已经发现,我遗漏了一些不重要的代码。我希望有人能理解和帮助我!谢谢!

【问题讨论】:

  • 危险:你容易受到SQL injection attacks的影响,你需要defend自己。
  • 我知道,但此时我只想修复这部分代码,谢谢!

标签: php jquery ajax


【解决方案1】:

这正是你可以做到的:

非常简单的方法:

在您的 PHP 文件中:

if ($query) {
    echo "success"; //anything on success
} else {
    die(header("HTTP/1.0 404 Not Found")); //Throw an error on failure
}

在您的 jQuery AJAX 方面:

var x = $(this).text();
$.ajax({
    type: 'POST',
    url: 'process.php',
    data: { text1: x },
    success:function(data) {
        alert(data); //=== Show Success Message==
    },
    error:function(data){
        alert("error occured"); //===Show Error Message====
    }
});

【讨论】:

  • @Aplex : 没问题..很高兴我能帮忙..! :D
  • 好的开始。想知道我们是否可以指定一些字符串或某种代码来传递有关错误的详细信息。我们可以在 PHP 中回显错误,但是如何在仍然触发错误而不是“成功”的同时将该消息传递给 AJAX?
  • @VisWebsoft :我认为这根本不可能,但使用一些复杂的方法仍然可能(我不确定)但为了方便起见,您可以将以下问题视为:@ 987654321@
  • @UmairShahYousafzai 是的,至少已经弄清楚了。我只需要在 header.response 中输入错误代码 4xx 或 5xx,然后在 Ajax 端使用以下内容进行检查:response.responseText,这是在出现错误代码时在 PHP 端生成的“echo”语句。
【解决方案2】:

首先,你需要让javascript知道服务器端有错误

try 
{
    $db = new PDO('sqlite:ordbas.db');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
} catch(PDOException $err)
{
    // Set http header error
    header('HTTP/1.0 500 Internal Server Error');
    // Return error message
    die(json_encode(array('error' => 'PDO fel '.$err->getMessage())));
}

第二,加载json时需要处理错误

var x = ($(this).text());
$.ajax({
   type: 'POST',
   url: 'process.php',
   data: { text1: x }
})

// This will be called on success 
.done(function(response){
   $('#tooltip').text(response);
})

// This will be called on error
.fail(function(response){
  // Error catched, do stuff
  alert(response);
});

【讨论】:

    【解决方案3】:

    $.ajax 中的 fail 回调用于捕获任何失败的结果。

    根据服务器脚本返回的成功/失败显示/隐藏错误 div。

    HTML 代码:

         <div class="error"><div>
    

    CSS:

     .error {
          color: red;
     }
    

    JS 代码:

    //hide error before ajax call
    $('.error').hide(); 
    $.ajax(...)
      .done:function(){
           ...
      }
      .fail: function(jqXHR, textStatus, errorThrown){
         $('.error').text(errorThrown); 
         $('.error').show();
      }
    

    注意:.success().error() 方法已从 jquery 1.8 中弃用,因此请避免使用它们。

    弃用通知:jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调自 jQuery 1.8 起已弃用。要为最终删除准备代码,请改用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。

    【讨论】:

      【解决方案4】:

      你可以把它放进去

      header('Content-type: application/json');
      echo json_encode(array('Error' => 'PDO fel "$err"'));
      

      【讨论】:

      • 请注意$err 应该用双引号括起来以供 php 评估
      【解决方案5】:

      尝试使用以下 sn-p 代替:

      var x = ($(this).text());
      $.ajax({
          type: 'POST',
          url: 'process.php',
          data: { text1: x },
          success: function(response){
              $('#tooltip').text(response);
          },
          error: function(error) {
              console.log(error);
          }
      });
      

      【讨论】:

      • 我们应该鼓励 .done() 和 .fail() 而不是弃用成功/错误。
      【解决方案6】:

      在数组上使用 PHP 函数 json_encode。然后该数组将作为 JSON 对象(“响应”参数/参数)呈现给 javascript。

      换句话说:

      PHP:

      // important to tell your browser what we will be sending
      header('Content-type: application/json; charset=utf-8');
      
      ... bla bla code ...
      
      // Check if this has gone right
      $success = $results->execute();
      $row = $results->fetch();
      $html = $row[0];
      
      $result = [
          'success' => $success,
          'html' => $html,
      ];
      
      print json_encode($result);
      

      JavaScript:

      // You may now use the shorthand
      $.post('process.php', { text1: x }, function(response) {
          if (response.success) {
              $('#tooltip').text(response.html);
          } else {
              ... show error ...
          }
      });
      

      【讨论】:

        【解决方案7】:
        $.ajax({
            url: "file_name.php",
            method: "POST",
            data: $("#form_id").serialize(),
            success: function () {
                alert("success"); //do something
            },
            error: function () {
                alert("doh!"); // do something else
            }
        });
        

        这是处理敏感表单数据(例如,您将绑定到 UPDATE 或 INSERT 查询的数据)的 POST 请求的示例。我包含了 serialize() 函数,以便处理后端表单中的名称字段。我还删除了通过成功函数传递数据。在处理敏感数据或不打算显示的数据时,您不希望这样做。想我会在这里发布这个帖子,因为当我搜索如何使用 AJAX 进行 POST 并返回错误时出现了这个帖子。

        说到返回错误,你会想要这样做,而不是现在 PHP 再次更新。我还建议通读 5.4+ 文档。

        http_response_code(404);
        die();
        

        我添加了一个 die() 函数来确保在您请求 404 后不会发生任何其他事情。

        【讨论】:

          猜你喜欢
          • 2016-08-27
          • 2012-09-19
          • 1970-01-01
          • 1970-01-01
          • 2020-11-17
          • 2012-03-20
          • 2019-04-24
          • 2016-04-13
          • 1970-01-01
          相关资源
          最近更新 更多