我有一个方法setTimeOut的问题,它调用函数self并设置一个延迟,该函数应该在每个请求完成后反复调用,但它只运行一次。它可以在不使用backbone.js的情况下工作,不知道它与backbone.js集成后不起作用。任何帮助表示赞赏!
所以这是客户端中运行GET请求从服务器获取数据的函数,请求在一个时间间隔内运行(在服务器中决定),一旦数据进入,客户端获取它并且请求再次运行后。
getRequest:function() {
var XHR = $.ajax({
url: '/nextdocument',
type: 'GET',
async: true,
cache: false,
timeout: 11000,
success:function(data) {
var name = data.description;
var price = data.price;
console.log("read--> " + name + price);
setTimeout("this.getRequest", 1000);
if (data.ok == "true") {
data["ok"] = data.ok;
$.ajax(
{
url: "/customerdone",
data: JSON.stringify(data),
processData: false,
type: 'POST',
contentType: 'application/json'
}
)
}else{
//no document if no read in
console.log("error--> " + data.errorMessage)
}
}
})
return XHR;
}
答案 0 :(得分:1)
问题是您在setTimeout
电话中使用“this”。你不能这样做,因为当计时器执行你想要引用的函数时,“this”将成为全局对象。
答案 1 :(得分:0)
可能,函数getRequest没有被调用。据我所知,这是因为您正在向setTimeout函数发送一个字符串 - “this.getRequest”。根据经验,永远不要将字符串传递给它,传递函数。虽然,在某些情况下可能完全没问题(我从不推荐它),这里'这'可能会造成麻烦。使用这样的东西:
getRequest:function() {
var fn = arguments.callee;
var XHR = $.ajax({
url: '/nextdocument',
type: 'GET',
async: true,
cache: false,
timeout: 11000,
success:function(data) {
var name = data.description;
var price = data.price;
console.log("read--> " + name + price);
setTimeout(fn, 1000);
if (data.ok == "true") {
data["ok"] = data.ok;
$.ajax(
{
url: "/customerdone",
data: JSON.stringify(data),
processData: false,
type: 'POST',
contentType: 'application/json'
}
)
}else{
//no document if no read in
console.log("error--> " + data.errorMessage)
}
}
})
return XHR;
}