尝试在javascript中重新访问URL

尝试在javascript中重新访问URL,javascript,jquery,python,polling,Javascript,Jquery,Python,Polling,我想访问某些REST URI $.ajax({ type: "POST", url: url + "result/" + ticket_id, success: function(data) { setTimeout(function(){pollResponse(url,data.id);}, 3000); } }); 这很有效。它访问URI,视图函数完成它的工作。因此,在success中,它将转到新的URI function pollResp

我想访问某些REST URI

$.ajax({
    type: "POST",
    url: url + "result/" + ticket_id,
    success: function(data) {
        setTimeout(function(){pollResponse(url,data.id);}, 3000);
    }
});
这很有效。它访问URI,视图函数完成它的工作。因此,在
success
中,它将转到新的URI

function pollResponse(url, id)
{
    $.getJSON(url + "status/" + id, {},
        function(data) {
            if (data.report == null)
            {
                console.log(data.status_response);
                setTimeout(function(){pollResponse(url, id);}, 3000);
            }
            else
                console.alert('DONE!');
        }
    );
};
如果URI没有作为数据的一部分返回
report
(或为空),那么我们将在3秒钟后再次询问

但在控制台中打印日志后,响应将停止,并显示
[200]OK
。 它不再询问服务器

我使用Python的views函数所做的只是

from cornice import Service
status = Service(name='status',
                    path=root+'/status/{some_id}',
                    description=status_desc)
@status.get()
def get_status(request):
   // do something

   if (...):
      return {'report': ''}
   else:
      return {'report': 'NOT EMPTY')

轮询函数中的
setTimeout
应该是:

setTimeout(function(){pollResponse(url, data.id);}, 3000);
而不是:

setTimeout(function(){pollResponse(url, id);}, 3000);

结果中可能存在解析问题或跨域问题。尝试更改代码以直接使用
ajax
函数:

$.ajax({
    url: url + "status/" + id,
    dataType: 'json',
    data: {},
    success: function(data) {
        if (data.report == null)
        {
            console.log(data.status_response);
            setTimeout(function(){pollResponse(url, id);}, 3000);
        }
        else
            console.alert('DONE!');
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.error(textStatus);
        console.error(errorThrown);
        console.log(jqXHR.responseText);
    }
);
通过这种方式,您可以查看响应是否导致错误。如果存在解析错误,可以通过error函数上的jqXHR.responseText获取数据,并查看错误所在


jQuery中AJAX的快捷方式函数在许多情况下都会自动出错。这就是我很少使用它们的原因。

url
id
看起来特定于请求,不在范围内,即关闭
setTimeout
回调本身。如果(data.report==null)应该是
if(data.report!==null)
?@JaredFarrish经过多次测试后,我认为它并没有真正的范围问题。。。但是谢谢。@ChrisClower谢谢你,克里斯。部分问题在于比较失败<代码>“在Javascript中不为空。谢谢我赞成你的意见。比较应该是
如果(data.report==“”)
我知道JS代码很糟糕lol。但是id将重用以前的相同id。这是另一个范围界定问题吗@User007啊,我明白了,你从第一个AJAX调用就把它传递到了那里。谢谢。它改进了问题,尽管错误没有被发现。这实际上是一个逻辑错误<代码>“不为空。谢谢,我第一眼就看到了,但是你说你可以拿到200美元,所以我想这是支票上第一行打印出来的。我确实没有引起足够的注意。很高兴你抓住了它。