如何使ajax失败可见?

时间:2014-06-25 15:45:33

标签: javascript ajax

我使用一个小型库来进行ajax调用。我希望函数在输入不存在的URL时抛出错误。

目前,它无声地失败,只是简单地传回未定义的响应文本。这使得一般的故障排除更加困难。

有一种简单的方法吗?

/**************************************************************************************************
AJAX
*/

    // specify type/url/callback in passed object
    Pub.ajax = function (config_ajax) {
        var xhr = new win.XMLHttpRequest();

        // get
        if (config_ajax.type === 'get') {
            xhr.open('GET', config_ajax.url, true);
            xhr.onload = function () {
                if (this.status === 200) {
                    config_ajax.callback(xhr.responseText);
                }
            };
            xhr.send(null);
        }

        // post
        if (config_ajax.type === 'post') {
            xhr.open("POST", config_ajax.url, true);
            xhr.setRequestHeader("Content-type",
                    "application/x-www-form-urlencoded");
            xhr.onload = function () {
                if (this.status === 200) {
                    config_ajax.callback(xhr.responseText);
                }
            };
            xhr.send(config_ajax.data);
        }

        // post for form_data
        if (config_ajax.type === 'multi') {
            xhr.open("POST", config_ajax.url, true);
            xhr.onload = function () {
                if (this.status === 200) {
                    config_ajax.callback(xhr.responseText);
                }
            };
            xhr.send(config_ajax.data);
        }
    };

2 个答案:

答案 0 :(得分:0)

我假设您无法使用具有.success和.error的jQuery $.ajax

根据您的呼叫以及服务器的响应方式,您可能需要使其更加强大。

if (this.status === 200) {
    config_ajax.callback(xhr.responseText);
} else if (console) {
    console.error("ajax call failed"
}

答案 1 :(得分:0)

试试这个

**************************************************************************************************
AJAX
*/

    // specify type/url/callback in passed object
    Pub.ajax = function (config_ajax) {
        var xhr = new win.XMLHttpRequest();

        // get
        if (config_ajax.type === 'get') {
            xhr.open('GET', config_ajax.url, true);
            xhr.onload = function () {
                if (this.status === 200) {
                    config_ajax.callback(xhr.responseText);
                }
            };
            xhr.send(null);
        }

        // post
        if (config_ajax.type === 'post') {
            xhr.open("POST", config_ajax.url, true);
            xhr.setRequestHeader("Content-type",
                    "application/x-www-form-urlencoded");
            xhr.onload = function () {
                if (this.status === 200) {
                    config_ajax.callback(xhr.responseText);
                }
            };
            xhr.send(config_ajax.data);
        }

        // post for form_data
        if (config_ajax.type === 'multi') {
            xhr.open("POST", config_ajax.url, true);
            xhr.onload = function () {
                if (this.status === 200) {
                    config_ajax.callback(xhr.responseText);
                }
            };
            xhr.send(config_ajax.data);
        }
        // when the ready state changes check for success or failure
        xhr.onreadystatechange=function(){
            if (xhr.readyState==4 && xhr.status==200)
            {
                        //Success
                alert('success');
            }else{
                        //Failure
                alert('Failure');
            }
        }

    };