JQuery-AJAX:超时后没有进一步的请求和表单帖子的延迟

时间:2010-06-02 18:09:57

标签: jquery ajax forms timeout

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

这已经有效了。

我现在要做的是:

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。

非常感谢你的建议。

1 个答案:

答案 0 :(得分:2)

延迟时间:

(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秒延迟将生效)。