ajax调用错误处理函数或if-else语句

时间:2014-09-04 17:31:07

标签: javascript jquery ajax

如果我已经使用了“if-else”语句,我想知道是否有必要在下面提到的例子中使用ajax调用错误处理函数:

我的模特:

 if ($query && $query->num_rows() > 0) {

        return $query->result();
    } else {
        return false;
    }    

我的控制器:

if ($this->model_users->did_get_data($user_id)) {

            $data["results"]= $this->model_users->did_get_data($user_id);           
            echo json_encode($data);            
        }
        else {      
        $data = array(
                    'message' => "Could not find any posts."
                     );
            echo json_encode($data);

        }

我的JS档案:

$.get('controller/get_data', function (data) {
        if (data.message !== undefined) {
            $( "#data_is_not_got").text(data.message);
        } else {

           //displaying posts               

        }
    }, "json");

2 个答案:

答案 0 :(得分:1)

是的,你仍然应该为AJAX调用添加一个错误处理程序。这样,您就可以优雅地处理if / else语句未涵盖的调用可能发生的任何潜在问题 - 无法连接到服务器,内部服务器错误等。

答案 1 :(得分:1)

这取决于您的控制器会发生什么。

如果您完全确定不会有任何404错误或没有任何超时错误,您可以在没有错误处理功能的情况下工作。但是因为我确定你不能说它100%肯定,我会说你必须实现它;)

但这是我的提示:如果您不止一次使用AJAX调用,请创建自己的“AJAX API”,它只使用一个回调,您可以使用status参数告诉回调是否一切正常,所以在事实上你只需要使用一个if-else语句。

这是我处理PHP后端的一个简短示例:

ajax = function (callback) {
    $.ajax({
        // whatever you need here
        success: function (response) {
            if (typeof callback == "function") {
                callback(true, response);
            }
        },
        error: function (e) {
            if (typeof callback == "function") {
                if (e.statusText == "timeout") {
                    callback(false, {"timeout": true})
                } else {
                    try {
                        JSON.parse(e.responseText)

                        // if try is successfull, there is no fatal-error (which would exit the PHP, so no JSON)
                        callback(false, {})
                    } catch (x) {
                        // only maximum-execution-time-errors are fatal errors :P
                        if (e.responseText.indexOf('<b>Fatal error</b>') != -1) {
                            callback(false, {"timeout": true})
                        }
                    }
                }
            }
        },
    })
}