使用ajax jquery执行超时

时间:2015-05-31 19:05:26

标签: javascript jquery ajax

下午好人!

我在jquery / ajax

中有以下代码
$.ajax({
                url:'../pujar',
                 dataType:'json',
                type:'get',
                cache:true,
               });

当我发送php时,此代码正常工作,但现在我不知道如何使用ajax超时。

在另一个代码中,我使用以下结构,但我对代码没有任何问题。

setInterval(function() {
    $.ajax({
        url: '../ajaxpujas',
        dataType: 'json',
        type: 'get',
        cache: true,
        success: json,
    });

    function json(data) {
        $("#tbodyid")
            .empty();
        $(data)
            .each(function(index, value) {
                var table = '<tr><td>' + value.users.name + '</td><td>' + value.id + '</td></tr>';
                $('#tbodyid')
                    .append(table);
            });
    }

}, 1000);

当我尝试使用此代码时,无法正常工作。我需要每秒重装一次。

$.ajax({
            url:'../pujar',
             dataType:'json',
            type:'get',
            cache:true,
            timeout:1000,
           });

2 个答案:

答案 0 :(得分:2)

您在AJAX请求中使用的“超时”与javascript中的setTimeout不同。 AJAX超时实际上指定了请求超时的时间。

根据jquery的文档

  

超时   类型:数字   设置请求的超时(以毫秒为单位)。这将覆盖使用$ .ajaxSetup()设置的任何全局超时。超时时间从$ .ajax调用点开始;如果其他几个请求正在进行且浏览器没有可用的连接,则请求可能会在发送之前超时。

因此,您实际上是在为请求设置超时(即,如果源在1000ms内没有响应,则认为它是超时故障)。因此,你必须每秒重新加载它。

你想用setInterval做什么会有效。虽然我建议使用setTimeout递归而不是setInterval以获得更好的性能(以及我猜想的预期效果)。

答案 1 :(得分:1)

Docs

  

设置请求的超时(以毫秒为单位)。这将覆盖使用$ .ajaxSetup()设置的任何全局超时。超时时间从$ .ajax调用点开始;如果其他几个请求正在进行且浏览器没有可用的连接,则请求可能会在发送之前超时。在jQuery 1.4.x及更低版本中,如果请求超时,XMLHttpRequest对象将处于无效状态;访问任何对象成员可能会抛出异常。仅在Firefox 3.0+中,超时无法取消脚本和JSONP请求;即使在超时时间之后到达,脚本也会运行。

timeout中的

$.ajax() s设置请求完成的超时(以毫秒为单位),如果由于任何原因请求未在请求中止的时间范围内完成

你必须使用

setInterval(function() {      
    $.ajax({
        url: '../pujar',
        dataType: 'json',
        type: 'get',
        cache: true,
        success: function (data) {
        }
    });
}, 1000);