【问题标题】:JQuery-AJAX: No further request after timeout and delay in form postJQuery-AJAX:超时和表单发布延迟后没有进一步的请求
【发布时间】:2011-02-26 23:12:28
【问题描述】:

我得到一个包含多个复选框的表单。此表单应发送到服务器以从服务器端脚本接收适当的结果。

这已经在起作用了。

我现在要实现的目标:

1) 实现超时:这已经可以工作了,但是一旦发生超时,新的请求就不再工作了。

2) 在请求结果时实现延迟:应实现延迟,以便不是每个复选框都会导致 POST 请求。

这就是我现在拥有的:

function update_listing() {

    // remove postings from table
    $('.tbl tbody').children('tr').remove();

    // get the results through AJAX
    $.ajax({
                    type: "POST",
                    url: "http://localhost/hr/index.php/listing/ajax_csv", 
                    data: $("#listing_form").serialize(),
                    timeout: 5000,
                    success: function(data) {
                                    $(".tbl tbody").append(data);
                                },
                    error: function(objAJAXRequest, strError) {
                                    $(".tbl tbody").append("<tr><td>failed " + strError + "</td></tr>");
                                }
                    });

    return true;

}

结果现在作为 HTML 表格行传递 - 我将在下一步将它们转换为 CSV/JSON。

非常感谢您的建议。

【问题讨论】:

    标签: jquery ajax forms timeout


    【解决方案1】:

    对于延迟:

    (function () {
    
    var timeout;
    
    function update_listing() {
    
        // remove postings from table
        clearTimeout(timeout);
        timeout = setTimeout(function () {
    
        $('.tbl tbody').children('tr').remove();
    
        // get the results through AJAX
        $.ajax({
            type: "POST",
            url: "http://localhost/hr/index.php/listing/ajax_csv", 
            data: $("#listing_form").serialize(),
            timeout: 5000,
            success: function(data) {
                $(".tbl tbody").append(data);
            },
            error: function(objAJAXRequest, strError) {
               $(".tbl tbody").append("<tr><td>failed " + strError + "</td></tr>");
            }
        });
    
        }, 1000); // 1 second?    
    
        return true;
    
    }
    }());
    

    这将等待一秒钟,直到发出 AJAX 请求。关于“一旦发生超时,新请求就不再起作用”是什么意思。如果您想在一个请求失败时触发另一个请求,只需再次调用update_list()(但请注意,1 秒延迟将生效)。

    【讨论】:

    • 谢谢马特,超时工作很好。关于 1):只要不触发(AJAX)超时,一切都会按预期进行,但是一旦请求中止,所有后续发布请求都会立即中止(不再执行单个请求)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2021-06-22
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多