2010-06-02 103 views
2

我得到了一个包含多个复选框的表单。该表格应发送给服务器,以从服务器端脚本接收适当的结果。JQuery-AJAX:超时后没有进一步的请求,并在表单后延迟

这已经在工作。

什么我现在做到:

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在下一步。

非常感谢您的建议。

回答

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

+0

谢谢马特,超时工作很好。 关于1): 只要(AJAX)超时没有被触发,所有事情都按预期工作,但一旦请求被中止,所有后续的请求立即中止(不再有一个单独的执行)。 – Nogga 2010-06-02 20:35:25