0

我的 AJAX 代码如下

$("#step_3 :submit").click(function(event) {
        event.preventDefault();


        var formData = $("#dbConfigID").serialize();

        $.ajax({

            url: "../pard_config/dbconfig.php",
            type: "POST",
            data: formData,
            beforeSend:function(){

            },

            success: function(responce) {
            $("#res").show().html(responce);


            }

        });

    });

PHP 代码(仅捕获)

 catch (Exception $e) {
        echo 'Warnning: ',  $e->getMessage(), "\n";
    }

如果我的数据库凭据错误,它仍然会在 firebug 中显示 200 成功代码。并且我的提交按钮正在触发,而 php ajax 响应是如下错误

Warnning: SQLSTATE[HY000] [2005] Unknown MySQL server host 'localhosts' (1)

如何在出现上述错误时停止按钮触发?

4

1 回答 1

2

Javascript 无法检测到服务器上发生的事情,因此它会关闭 HTTP 状态代码。如果您遇到服务器端故障,则需要向客户端返回某种故障消息。

我个人的偏好是不理会 HTTP 状态码,然后发回一个漂亮的小 json 结构:

if ($failure) {
   echo json_encode(array('status' => 'failed', 'code' => xxx, 'message' => 'Something blew up!'));
}

然后有

...
success: function(data) {
   if (data.status == 'failed') {
     throw ServerSideError;
   }
   ...
})

在你的 JS 代码中。

有人会说您需要发送一个反映错误的 HTTP 状态代码,即

if ($failure) {
   header('HTTP/1.1 500 Database Error');
}

Javascript 将拾取非 2xx 代码并触发errorAJAX 处理程序中的代码路径。

于 2013-04-16T15:38:59.360 回答