javascript - 重试时编辑查询字符串参数
问题描述
我有以下代码结构:
$.ajax({
type:"GET",
url:"http://example.com",
data:{
final:false
},
retry: {
attempt: 1,
limit: 3,
delay: 2000
},
success((data) => {
console.log("yay!");
}),
error((error) => {
if (this.retry.attempt++ <= this.retry.limit) {
var self = this;
if (self.retry.attempt > self.retry.limit) {
self.data.final = true;
}
setTimeout(() => {$.ajax(self)}, this.retry.delay);
}
})
});
问题是,当第一次调用请求时,data
参数被删除,其值作为查询字符串附加到 url。所以data
已经不存在了。传递给重试调用的对象是:
{
type:"GET",
url:"http://example.com?final=false",
retry: {
attempt: 2,
limit: 3,
delay: 2000
},
success((data) => {
//...
}),
error((error) => {
//...
}
}
如何编辑final
最后一次重试请求的参数?
解决方案
尝试在ajax
通话之外定义您的请求:
const request = {
type:"GET",
url:"http://example.com",
data:{
final:false
}
};
$.ajax({...request, ...{
retry: {
attempt: 1,
limit: 3,
delay: 2000
},
success((data) => {
console.log("yay!");
}),
error((error) => {
if (this.retry.attempt++ <= this.retry.limit) {
const retryRequest = {...request, ...this};
if (this.retry.attempt > this.retry.limit) {
retryRequest.data.final = true;
}
setTimeout(() => {$.ajax(retryRequest)}, this.retry.delay);
}
})
});
或者,如果您只处理一个只需要在最后一次尝试时设置的标志:
$.ajax({
type:"GET",
url:"http://example.com",
retry: {
attempt: 1,
limit: 3,
delay: 2000
},
success((data) => {
console.log("yay!");
}),
error((error) => {
if (this.retry.attempt++ <= this.retry.limit) {
var self = this;
if (self.retry.attempt > self.retry.limit) {
self.data = {final: true};
}
setTimeout(() => {$.ajax(self)}, this.retry.delay);
}
})
});
此外,胖箭头函数没有本地上下文,因此您的error
函数不需要使用self
,即这将起作用:
error((error) => {
if (this.retry.attempt++ <= this.retry.limit) {
if (this.retry.attempt > this.retry.limit) {
this.data = {final: true};
}
setTimeout(() => {$.ajax(this)}, this.retry.delay);
}
})
推荐阅读
- java - 为什么 do-while 不响应 .equals
- django - 查找在 M2M 项目中存在差异的同级记录
- haskell - 从 url 获取数据并在 Haskell 上解析它的最佳方法是什么?
- python - 使用 numpy.ones 作为数组的索引
- android - 无法添加 socket.io 库
- spring - 使用activiti引擎执行新创建的流程工作流,无需重启服务器
- docker - docker镜像可以用作可启动镜像吗
- python - tf.keras & tf.estimator & tf.dataset
- wordpress - 自定义帖子类型类别及其帖子列表
- angularjs - 这是使用 angularjs 导出到 Excel 的正确方法吗