如果失败,如何使jQuery自动重试load()?

时间:2011-06-09 20:28:52

标签: jquery

我正在页面上的许多地方通过jquery load()进行一些内容替换。

<script>
  $(document).ready(function(){
    $('#row').load('/getStudentDetails',{studentId:3});
  });
</script>

在我的开发服务器上,一切都很完美。在我的实时服务器上,它有时会给我一个“请求无效”错误,我可以在firebug中看到。我认为服务器不堪重负,或者某些缓存模块可能会与多个请求混淆。我将尝试单独找出该问题,但也只是想让它在失败时重试相同的请求(一次)。是否有一种灵巧的jQuery方法呢?

2 个答案:

答案 0 :(得分:3)

这样的事可能适合你。

function doAjax() {
    $.ajax({
        url: '/path/to/file',
        type: 'GET',
        dataType: 'html',
        data: {studentId : 3},
        error: function(xhr, textStatus, errorThrown) {
            setTimeout('doAjax()', 5000);
        }
    });
}

如果您的服务器被淹没,我建议使用setTimeout延迟等待一段时间再尝试,否则会严重影响您的服务器。

编辑:我没注意到你只说了一次。您可以将setTimeout包装在计数器中,因此递归不会重复。或者,如果您决定继续尝试,这是一种很好的方式,直到您得到回复为止。

答案 1 :(得分:1)

我不会称之为光滑,但您可以使用$.load的回调函数。如果状态为error,则可以重做负载。

<script>
 $(document).ready(function(){
  $('#row').load('/getStudentDetails',{studentId:3}, function(response, status, xhr) {
    if(status == 'error') {
      $('#row').load('/getStudentDetails',{studentId:3});
    }
  });
 });
</script>