【问题标题】:Catching errors from server side从服务器端捕获错误
【发布时间】:2010-08-05 12:41:17
【问题描述】:

我正在从我的服务器获取 json 数据以将它们显示为表格。

$('#queryFrom').ajaxForm({                    
                dataType:  'json',                                        
                beforeSubmit:  showRequest,  // pre-submit callback
                success:   processJson,                    
                error: function (xhr, ajaxOptions, thrownError){
                    $('#queryResult').html('<div class="ui-corner-all ui-state-error"><p><span class="ui-icon ui-icon-alert"></span>'+thrownError+'</p></div>');
                    $('#queryResult').show("slow");
                }
            });

我能以某种方式将 mysql 错误与 json/ajax 错误端分开吗? 目前我得到:无效的 JSON:SQLSTATE[42S02]:未找到基表或视图:1146 表 'simover.simulation' 不存在{} 我可以自定义 jquery 抛出的消息吗? 谢谢阿曼。

编辑

可以使用 xhr.responceTxt 代替 throwError

【问题讨论】:

  • 您应该在服务器端捕获并处理 MySQL 错误并返回例如一个空的结果集。服务器错误消息永远不应到达客户端。
  • 您是否关闭了php.ini 中的display_errors 选项?
  • 我想查看错误。用户界面提供了向服务器提交查询的便利。如果我再次返回空集,则 Invalid JSON: 将保留在那里。我想要一条自定义消息,例如:对不起,您的查询错误并指出错误所在。
  • 这是一个公共应用程序吗?如果您显示此类错误,它们可能会泄露有关您的数据库的信息,这些信息可能会帮助某人闯入它。您可能希望在您的应用程序中有一个选项来完全禁用这些错误,或者仅在客户端具有特定 IP 地址时才显示它们
  • @Ken 专家用户将访问,对于客人来说这是准备好的陈述,在这种情况下我们根本没有任何错误。

标签: php jquery mysql json mysql-error-1146


【解决方案1】:

目前,您的错误回调被调用是因为您的服务器响应中有错误,而不是因为您的服务器遇到问题。 Javascript 引擎抛出一个错误,因为它希望返回 JSON 数据,但它却得到一个纯字符串 Base table or view not found...,这不是一个有效的 JSON 字符串。

我建议您在服务器上捕获这些错误,例如使用trycatch 块并在发生错误时发回某种特殊响应。像这样:

{
    "ok": false, 
    "error_key": "database_error", 
    "error_text": "Base table or view not found: 1146 Table 'simover.simulation' doesn't exist"
}

【讨论】:

  • 优雅的解决方案。谢谢!我还发现我可以从数据库类中读取所有抛出的错误:xhr.responseText
猜你喜欢
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 2012-02-25
  • 2021-07-12
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多