$(document).ready(function() {
(function poll() {
setTimeout(function() {
$.ajax({
url: "/project1/api/getAllUsers",
type: "GET",
success: function(data) {
console.log("polling");
},
dataType: "json",
complete: poll,
timeout: 5000
}), 5000
});
})();
});
这只是保持执行速度与服务器响应速度一样快,但我希望它只会每5秒轮询一次。有什么建议吗?
编辑:我应该在请求完成后5秒钟添加。
答案 0 :(得分:7)
您似乎已设法将setTimeout
延迟参数写入错误的位置。
$(document).ready(function() {
(function poll() {
setTimeout(function() {
$.ajax({
url: "/project1/api/getAllUsers",
type: "GET",
success: function(data) {
console.log("polling");
},
dataType: "json",
complete: poll,
timeout: 5000
}) //, 5000 <-- oops.
}, 5000); // <-- should be here instead
})();
});
如果你按照大括号,你会看到你正在呼叫setTimeout
:
setTimeout(function () {
$.ajax(), 5000
})
应该是
setTimeout(function () {
$.ajax();
}, 5000)
这应该在前一个完成后5秒钟调用AJAX投票。
答案 1 :(得分:1)
如果它应该每5秒轮询一次,而不是在完成最后一个请求后5秒,则可以使用setInterval。不知道这是否可以接受,但它会使递归变得不必要。
function poll() {
$.ajax({
url: "/project1/api/getAllUsers",
type: "GET",
success: function(data) {
console.log("polling");
},
dataType: "json"
});
}
setInterval(poll, 5000);
答案 2 :(得分:0)
如果你想使用jQuery的promise语法,而不是回调语法,这是另一种整洁的方法。
void get_response()
{
WebClient wp = new WebClient();
string url="your json url";
var response=wp.DownloadString(url)
get_data(response)
}
void get_data(string response)
{
datagridview.Rows.clear();`enter code here`
JArray fetch= JArray.Parse(response);
if(fetch.Count()>0)
{
for(int i=0;datagridview.Rows.Count>i;i++)
{
int n=datagridview.Rows.Add();
datagridview.Rows[n].Cells[0].Value=fetch[i]["Json
ObjectName1"].ToString();
}
}
}