相关疑难解决方法(0)

如何在jQuery Ajax调用之后管理重定向请求

我正在使用$.post()Ajax调用servlet,然后使用生成的HTML片段替换div用户当前页面中的元素.但是,如果会话超时,服务器会发送重定向指令以将用户发送到登录页面.在这种情况下,jQuery正在用div登录页面的内容替换元素,迫使用户的目光确实见证了罕见的场景.

如何使用jQuery 1.2.6从Ajax调用管理重定向指令?

javascript ajax jquery redirect

1319
推荐指数
26
解决办法
84万
查看次数

jQuery和AJAX响应头

所以我有这个jQuery AJAX调用,响应来自服务器的302重定向形式.我想采用这种重定向并将其加载到iframe中,但是当我尝试使用javascript警报查看标题信息时,即使firebug正确地看到它,它也会出现空值.

这是代码,如果它有帮助:

$j.ajax({
    type: 'POST',
    url:'url.do',
    data: formData,
    complete: function(resp){
        alert(resp.getAllResponseHeaders());
    }
});
Run Code Online (Sandbox Code Playgroud)

我真的无法访问服务器端的东西,以便将URL移动到响应主体,我知道这将是最简单的解决方案,因此任何有关解析标头的帮助都会非常棒.

ajax jquery redirect header http-status-code-302

153
推荐指数
7
解决办法
30万
查看次数

在AJAX调用中,未遵循302

我正在使用jQuery 1.6.2向同一域上的页面发出POST AJAX请求.该页面将302重定向到另一个页面.

现在,在我的本地计算机上工作正常,但在我们的生产服务器上,从未遵循重定向,并且在Chrome检查器中,该请求被称为"已取消".

如果我在不涉及javascript的情况下访问同一页面,一切正常,正如我所说,AJAX在我的本地机器上运行,但在生产服务器上运行.

有谁知道这会导致什么?

服务器之间存在一些差异(OS X,Apache2,PHP5.3.6,本地机器上的HTTP,Ubuntu,Lighttpd,PHP5.3.3,生产中的HTTPS),但对我来说没有任何区别应该有所不同.

ajax jquery

22
推荐指数
2
解决办法
5万
查看次数

什么是jQuery AJAX抛出的302错误代码?

我正在使用ASP.NET MVC和jQuery,我有一个在每个页面上重复的UserControl.在每个页面请求中,都会发生AJAX回调.到现在为止还挺好.

但是当我在localhost并且我发布该网站时,我注意到这个AJAX正在抛出一个302错误.这仅发生在https页面上,仅在FF和Chrome中.在IE上,AJAX请求工作正常.

这302错误是什么?为什么它只出现在https页面上,只出现在FF和Chrome中?

ajax jquery http-status-code-302

20
推荐指数
2
解决办法
7万
查看次数

如何优雅地处理Ajax调用的登录过期?

我的Web应用程序由许多服务器端的Ajax调用组成RESTful APIs.每次客户登录我的站点时,登录页面JWT将从服务器获得(JSON Web令牌)令牌并将其存储为cookie客户端.(我选择将其存储为cookie,因为这是让浏览器自动发送它的唯一方法,据说它比HTML5 Web存储更安全).令牌中有一个字段描述令牌的到期日期.对于每个Ajax调用,将发送令牌以进行身份​​验证.

如果客户端长时间停留在我的页面上,则令牌可能会过期.当客户端发出下一个HTTP请求(而不仅仅是REST调用)时,服务器将检测到它.我使用a servlet filter来拦截allHTTP请求并检查令牌是否过期.如果令牌过期,将发送重定向到登录页面的响应.

但是上面的方法存在一个问题:"如何在客户端优雅地处理重定向到登录页面的响应?"

  • 对于non-Ajax发起的HTTP请求,我可以依靠浏览器来处理重定向到登录页面的响应并自动跳转页面.

  • 对于Ajax发起的HTTP请求,似乎我需要向eachajax调用添加额外的逻辑completion handler来检测重定向到登录页面的响应imperatively并使页面跳转.

还是我完全错了?

一些参考:

JWT(JSON Web Token)自动延长到期时间

我应该为我的API使用哪种身份验证策略?

隐式和显式身份验证

添加1:

浏览器似乎会透明地处理302重定向.所以也许我可以只返回302重定向到登录页面,无论是ajax调用还是普通页面访问.我会尽力回复.

这里:

如果响应是HTTP重定向(状态代码301,302,303或307),则必须透明地遵循(除非它违反安全性或无限循环预防措施).任何其他错误(包括401)必须使对象使用该错误页面作为响应.

在JavaScript中捕获302 FOUND

如何在jQuery Ajax调用之后管理重定向请求

authentication ajax rest login jwt

12
推荐指数
2
解决办法
1507
查看次数

如何获取jQuery.ajax响应状态?

有没有办法知道返回的jqXHR对象是否从另一个请求重定向?例如,拥有以下代码:

   jQuery.ajax({
            type:       'POST',
            url:        'http://example.com/page.html',
            complete:   function(response, status) {
                        console.log(response.statusCode);
                        // do something
                        }
        });
Run Code Online (Sandbox Code Playgroud)

如果使用301或302状态代码重定向ajax url,则响应将是重定向页面的结果,并将返回200(OK)状态代码.我认为这是一个jQuery的错误(不知道这是否是预期的恶作剧,因为最终的响应实际上是成功的)我不能得到原始响应Headers来检查是否存在Location Header,因为这是仅适用于重定向的请求.

具有上述代码的Firebug通过XHR记录这两个请求

http://example.com/page.html 302(暂时移动) http://example.com/redirect.html 200(确定)

但是jQuery只返回第二个请求的数据.

也许有办法从第一个请求中获取数据?或者获取响应URL并将其与原始请求中的URL进行比较?

ajax jquery redirect jqxhr

9
推荐指数
1
解决办法
1万
查看次数

在通过常规表单提交或Ajax请求访问时使浏览器重定向的表单 - 这可能吗?

我有一个带有表单的网页.当用户提交表单时,我希望服务器使浏览器重定向到表单操作的不同页面.现在,我通过使用PHP的函数发送302状态代码来做到这一点.它工作正常.

我试图让服务器上的页面以相同的方式重定向浏览器,无论它是否正常提交(没有Javascript)或通过Ajax.我尝试通过将窗口位置设置为Location头中的任何URL来实现此目的.我正在使用jQuery,并进行如下调用:

$.ajax({
    url: this.action,
    type: "POST",
    data: getFormData(this),
    complete: function(request) {
        window.location.assign(request.getResponseHeader("Location"));
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,这没有用.在考虑之后,我意识到这并不是很令人惊讶.在Ajax请求中,浏览器应该在更改readyState之前透明地处理重定向响应,例如302代码.当完整函数运行时,它正在查找最终目标中的Location标头而未找到它.

作为实验,我尝试使用Location标头发送200状态代码.我尝试了Ajax请求,它工作正常.但是,当我执行非Ajax提交时,它不起作用.浏览器转到表单操作页面并保持在那里,就像它忽略了Location标题一样.

有没有办法在两种情况下都使同一页面重定向,而服务器不必知道或关心请求是否是Ajax请求?

如果这很重要,我在各种浏览器(IE8,IE7,IE6,Firefox 3.5,Chrome)中尝试了表格,每次都有类似的结果.此外,我正在做一个帖子请求,以避免碰到IE的2083字符URL长度限制.

html javascript php ajax jquery

4
推荐指数
1
解决办法
832
查看次数