gpt4 book ai didi

javascript - 使 jquery jqxhr 的行为就像已经发送请求一样

转载 作者:行者123 更新时间:2023-11-28 00:43:56 25 4
gpt4 key购买 nike

我有 SendRequest 对象,该类具有类似的功能

        request: function(args)
{
return $.ajax.apply(null, args);
};

然后很多类使用SendRequest对象来获取服务器响应

        var prom = SendRequest.request(
{
type: 'GET',
url: _this.uri
});

return $.when(prom).done(function(response)
{
.... do something
});

我的目标是在 SendRequest.request 中需要首先检查 window.localStorage。是否已经有值,如果之前没有值则发送请求。否则,如果 localStorage 上已有值,则返回之前保存的值的 $.ajax() 对象。

        request: function(args)
{
var ls = window.localStorage;
var savedResponse = ls.getItem(args.url);
if (savedResponse !=== null)
{
var result = $.ajax();
result.responseText = savedResponse;
result.readyState = 4;
result.status = 'OK';
return result;
}
else
{
return $.ajax.apply(null, args);
}
};

但不幸的是它不起作用:(我一直在寻找,但找不到像我这样的案例

我已经尝试过这种方式 how to fool jqXHR to succeed always但这没有多大帮助

最佳答案

这不起作用的原因是,虽然您创建了一个假的 jqXHR 对象,它是来自 $.ajax 的响应,但该对象实际上并不是提供给 .done 回调的参数 - 它实际上是第三个参数。

此外,恕我直言,您不应该真正使用 $.when 来“ promise ”单个非 promise 对象。它的目的是处理多个 Promise 之间的同步,而它将每个非 Promise 包装到一个新的 Promise 中只是一个副作用。

相反,您应该创建一个已使用适当数据“解决”的新 promise :

if (savedResponse != null) {
return $.Deferred(function() {
// retrieve relevant fields from localStorage
...
this.resolve([data, textStatus, jqXHR]);
}).promise();
} else {
// perform real AJAX request
return $.ajax.apply($, args);
}

或者,考虑只记住返回数据本身(对于成功的调用),而不是整个响应三元组。

您还可能会发现我在 jQuery UK 2013 上所做的演示文稿 - http://www.slideshare.net/RayBellis/memoizing-withindexeddb

关于javascript - 使 jquery jqxhr 的行为就像已经发送请求一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27620885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com