我正在访问我的网站,使用它的REST服务,它允许me首先进行身份验证,然后使用身份验证的会话返回值来执行进一步的API调用。我可以很好地访问它,没有任何问题。会议在一小时后超时。假设我想在一个小时后进行一个API调用,我想重新验证并继续进行一个AJAX调用,该调用首先发生。您能否建议我如何重新执行AJAX调用,如果会话超时了,它将首先进行身份验证,然后继续最初存在的AJAX调用吗?
$.ajax({
type: "GET",
dataType: "json",
url: "url",
cache: false,
async: false,
success: function (data) {
alert(data);
},
error: function(xhr, textStatus, errorThrown) {
//$.ajax(this);
//return;
},
statusCode: {
403: function() {
var session = retryLogin();
if(session !== "")
{
// call this function again? How can we achieve this?????
}
}
}
});
请告诉我如何再次调用应该在最初运行的ajax调用?
编辑:基本上有两个AJAX调用,一个用于身份验证,用于获取会话ID,另一个用于根据该会话ID获取一些数据。如果会话ID在中途过期,我想重新执行身份验证调用,然后继续进行最初将要发生的AJAX调用。对于我如何做到这一点,有什么建议吗?
我还添加了一张图表,以显示我想要实现的目标。
干杯。
发布于 2015-06-09 16:05:51
我不明白“失败后”对你意味着什么,但从以下几个方面你就会明白行动路线,以及如何处理你的问题
您可以将ajax调用包装在一个函数中,并在发生错误时再次调用它。
var callMeAgain = function(){
$.ajax({
type: "GET",
dataType: "json",
url: "url",
cache: false,
async: false,
success: function (data) {
alert(data);
},
error: function(xhr, textStatus, errorThrown) {
callMeAgain();
//text statuses for error are: "timeout", "error", "abort", and "parsererror"
}
});
};
这就是你想要达到的目标?
ajax调用有一个超时值参数,您可以这样做。
var callMeAgain = function(){
$.ajax({
type: "GET",
dataType: "json",
url: "url",
cache: false,
timeout: 400,
async: false,
success: function (data) {
alert(data);
},
error: function(xhr, textStatus, errorThrown) {
if (textStatus=="timeout") {
callMeAgain();
}
}
});
正如我在一个类似的答复中所看到的那样,必须补充如下:
设置请求的超时(毫秒)。这将覆盖使用$.ajaxSetup()设置的任何全局超时。超时时间从发出$.ajax调用时开始;如果其他几个请求正在进行,并且浏览器没有可用的连接,则可以在发送请求之前将请求超时。在jQuery 1.4.x及更低版本中,如果请求超时,XMLHttpRequest对象将处于无效状态;访问任何对象成员都可能引发异常。仅在Firefox中,脚本和3.0+请求不能被超时取消;即使它在超时期间之后到达,脚本也会运行。
让我们假设您是在某个消息中写入异常,然后我们将在成功函数中捕获异常。
var sessionCallVar = function sessionCall () {
return $.ajax(...);
};
var callMeAgain = function(){
$.ajax({
......
success: function (response) {
if(response.SessionExceptionMessage !== ''){
//then we have a session error
sessionCallVar().then(callMeAgain);
}
},
error: function(xhr, textStatus, errorThrown) {
.........
}
});
基于承诺的ajax调用链接:How do I chain three asynchronous calls using jQuery promises?
这是我在asp.net中采用的某种体系结构,我并不真正了解您的服务器端语言:ASP.NET MVC Ajax Error handling。
Ajax错误处理和处理错误回调中的自定义异常:jQuery Ajax error handling, show custom exception messages
发布于 2015-06-15 17:46:05
如果您由于某种原因而丢失了连接很长时间,总是丢失您的会话信息,我建议您使用@RazvanDumitru建议的答案,但是如果您(以任何方式丢失了您的互联网连接)并且希望恢复您的所有会话信息,您需要在数据库中存储一些数据(将所有的var打包成json-string)并生成一些键来识别,当您恢复您的会话并重新重新记录时,请从db中读取所有的vars。
使用https://plugins.jquery.com/cookie/存储键值,以在浏览器cookie中标识您的vars。
注意:如果您想要更多的安全性(显然需要以某种随机的形式生成密钥),如果您愿意,可以使用一些公钥来保护它们。然后存储在浏览器中。您可以使用javascript代码或服务器脚本来完成所有这些操作。
https://stackoverflow.com/questions/30196073
复制相似问题