Jquery:当ajax请求失败并出现错误500时,脚本停止

时间:2014-11-14 19:57:52

标签: javascript jquery ajax internal-server-error

我有一个脚本可以间隔发送ajax请求,理想情况下它应该永远不会停止工作。

    <script type="text/javascript">
    var delay = 750;
    window.setInterval(endlessJob, delay);
    function endlessJob() {
        //read from endless steam of data
        var data = getData();
        sendAjax(data);
    }

    function sendAjax(data) {
         $.ajax({
            url: "url",
            jsonp: "jsonp",
            dataType: "jsonp",
            data: {
                q: data
            },
            success: function (res) {
                doSomething();
            },
            error: function (jqXHR, textStatus, errorThrown) {
                console.log('ajax error! ' + errorThrown.message + "\n status: " + textStatus);
                //should resume endless job, but the script fails with error(((((((((((
                 window.setInterval(endlessJob, delay);
            }
        });
    }
</script>

然后就出现了问题:经过多次请求后,通常在1000到2000之间,请求因内部服务器错误500失败而且该功能永远不会恢复。已经尝试过try / catch,但没有成功(。基本上我需要 吞下错误并继续脚本 。有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

您每隔3/4秒拨打一次服务器超过一千次。最终,您将在上次通话有足够时间完成之前拨打电话。如果您希望脚本长时间运行 ,我建议您将延迟延长至1500-2000(1.5-2秒,具体取决于您的服务器)或更改代码以要求回拨。这样,下一个调用将不会被初始化,直到前一个调用完成。这是您使用回调修改的代码。我没有时间测试它,但希望它会让你大致了解如何用回调来编写它。

<script>

    function start() {
        var data = getData();

        sendAjax(data, function(callbackText) {
            console.log(callbackText);
            start(); // the previous ajax call is done. we may now start the next one
        });
    }

    function sendAjax(data, callback) {
        $.ajax({
            url: "url",
            jsonp: "jsonp",
            dataType: "jsonp",
            data: {
                q: data
            },
            success: function(res) {
                doSomething();
                callback("This call is done. Now moving on to the next one.");
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log('ajax error! ' + errorThrown.message + "\n status: " + textStatus);
                //should resume endless job, but the script fails with error(((((((((((
                window.setInterval(endlessJob, delay);
            }
        });
    }

    start(); // start the entire process
</script>