2016-06-13 85 views
0

我有一个邮政电话。在结果之后我想再做一次CALL检查状态。但只有如果状态已完成。如何在jquery中进行轮询?

jQuery.ajax({ 
     type: "POST", 
     contentType: "application/json", 
     url: "/doPostURL...., 
     headers: { 
      "x-csrf-token": sCsrftoken 
     }, 
     success: function() { 
     .. now I want to do the polling on the status 
     jQuery.ajax({ 
      type: "GET", 
      dataType: "json", 
      url: "/getStatusUrl , 
      success: function(data, textStatus, response) { 
     // to continue only if status if Finished 
      }, 
      error: function() { 
      } 
     }); 
    } 
}); 
+0

为什么你不能在成功函数上打电话? –

+0

第一个电话是POST,然后我需要打电话查看统计信息。如果状态为“已完成”,我想继续但可能需要时间 – user1365697

+2

“contentType:”application/json“,” - 您正在发出GET请求。没有请求主体来描述内容类型。那里在做什么?你用'dataType'混淆了它吗? (对于这个问题,前面的POST请求没有'data',所以它里面也没有任何JSON) – Quentin

回答

1

$就返回推迟对象。

你可以做下面的事情。更多信息here

var doSomething = $.ajax({ 
    url: '/path/to/file', 
    type: 'default GET (Other values: POST)', 
    dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)', 
    data: {param1: 'value1'}, 
}) 
function doneCallback(){ 
    // Handle exit condition here. 
    doSomething(); 
} 
function failCallback(){ 
    // Handle failure scenario here. 
} 
doSomething.then(doneCallback, failCallback) 
+0

但这里没有投票 – user1365697

+0

你可以实现你doneCallback像'的setTimeout(DoSomething的,在PollingInterval);' –

+0

只是为了更加明确添加到它......这里的工作原理是:首先DoSomething的被称为..一旦通话结束,doneCallback被调用...在doneCallback中,我们在特定的轮询间隔后再次调用doSomething。除非满足退出条件,否则此循环继续。 –

1

你可以尝试将ajax呼叫导出到一个功能,并使用递归池。

注意:你应该有一个最大计数器,这样你就不会无限次调用服务器。

var max_count = 20; 
var counter = 0; 

function getStatus() { 
    jQuery.ajax({ 
    type: "GET ", 
    contentType: "application/json ", 
    url: "/getStatusUrl, 
    success: function(data, textStatus, response) { 
     // to continue only if status if Finished 
     if (textStatus != "status" && ++counter < max_count) { 
     getStatus(); 
     } 
    }, 
    error: function() {} 
    }); 
} 
1

只需设置一个函数代码:

jQuery.ajax({ 
    type: "POST", 
    contentType: "application/json", 
    url: "/doPostURL...., 
    headers: { 
     "x-csrf-token": sCsrftoken 
    }, 
    success: function() { 
     doPoll(); 
    } 
}); 

var doPoll = function() { 
    jQuery.ajax({ 
    type: "GET", 
    contentType: "application/json", 
    url: "/getStatusUrl , 
    success: function(data, textStatus, response) { 
     //do stuff 
     doPoll(); 
    }, 
    error: function() { 
     //handle error 
    } 
    }); 
} 
+0

你是否想要在成功中添加逻辑来检查状态如果状态,如果不是我需要再次调用doPoll? – user1365697

+0

你能改说你的问题吗?我不完全明白你想说什么。 –