2010-08-05 99 views
0

我从我的服务器获取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 erros方面分开吗? 目前得到:JSON无效:SQLSTATE [42S02]:未找到基本表或视图:1146'simover.simulation'表不存在{} 我可以自定义jQuery引发的消息吗? 谢谢阿尔曼。

编辑

可以使用xhr.responceTxt,而不是thrownError

+4

您应该捕获并处理服务器端的MySQL错误,并返回例如一个空的结果集。服务器错误消息不应该到达客户端。 – 2010-08-05 12:44:09

+0

您是否关闭了'php.ini'中的'display_errors'选项? – 2010-08-05 12:45:19

+0

我想查看错误。用户界面提供了向服务器提交查询的功能。如果我再次返回空集,那么无效的JSON:停留在那里。我想有一个自定义的消息,如:对不起,您的查询是错误的,并指出什么是错的。 – Arman 2010-08-05 12:48:41

回答

5

当前您的错误回调被调用,因为您的服务器响应中有错误,而不是因为您的服务器遇到问题。 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" 
} 
+0

优雅的解决方案。谢谢! 我还发现,我从数据库类的所有抛出的错误可以读取:xhr.responseText – Arman 2010-08-05 12:58:02