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

标签 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,但没有成功(。基本上我只需要吞下错误并继续脚本。有人可以帮助我吗?

最佳答案

您每 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>

关于javascript - Jquery:当 ajax 请求失败并出现错误 500 时脚本停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26937879/

相关文章:

javascript - 单击模式提交按钮后打开警报窗口

asp.net-mvc - 具有 Ajax 表单的模型状态

javascript - 实时检查用户可用性 LDAP

javascript - 如何使用 Ramda 对字符串数组进行数字排序?

javascript - 拖放认识 child .length

JavaScript - 使用传单中的变量调用函数

javascript - 覆盖 ui-bootstrap 的默认分页模板

javascript - 设置自定义过滤器,将列表项标题从搜索条件中排除

javascript - 动态创建和删除 HTML 元素

php - 通过 PHP 将 JQuery 生成的元素连接到数据库