【问题标题】:I need to know about the response type of $.ajax() method in jquery我需要了解 jquery 中 $.ajax() 方法的响应类型
【发布时间】:2012-01-29 17:59:12
【问题描述】:

我在一个电子商务网站上工作,我需要谷歌登录它,所以当用户创建他/她的购物清单并点击添加到列表按钮时。我可以通过$.ajax() 方法发送我的数据,所以我真正想要的是,当来自 ajax 方法的响应到来时,如果用户未登录,它应该将我重定向到登录页面,否则它应该保存我的对象。

【问题讨论】:

  • Java 在哪里涉及?还是你的意思是 JavaScript?
  • 好吧,先生,Java 参与了 servlet 控制器,我想控制 servlet,它应该只授予登录用户以显示列表,否则它应该将他们重定向到登录页面。

标签: javascript jquery


【解决方案1】:

在该 .ajax() 调用的目标端点中,检查您的身份验证,如果用户未登录,请将响应标头设置为 - 401 Unauthorized。

然后在 .ajax() 中执行以下操作:

$.ajax(function() {
   //.. your other ajax stuff..//
   error: function(jqXHR, textStatus, errorThrown) {
      // only redirect if user unauthorized - 'errorThrown' has text part of HTTP status header
      if(errorThrown == "Unauthorized") {
          window.location.href = "myloginpage.html";
      }
   }
});

响应头设置为 401 将触发 .ajax() 的错误函数,而不是成功函数。

编辑:
将错误功能更改为仅在未经授权时重定向

另外请注意,如果这是一个跨域的jsonp调用,它将不起作用,因为jsonp请求会静默失败并且不会触发错误函数

【讨论】:

  • 尊敬的先生,但我想要的是 servlet 应该转发这个特定页面,而不是脚本。
  • @AnkurJain 这正是它正在做的事情。通过将 servlet 中的 http 标头设置为 401,您就是在告诉 .ajax() 用户被拒绝。至于重定向本身,您必须在 .ajax() 中执行此操作。请记住,在 ajax 调用中,页面本身不做任何事情。只有 ajax 调用处于活动状态,并且它与 servlet 以“一臂之力”进行交互,因为没有更好的术语。 servlet 无法控制页面。
  • 实际上,先生,servlet 不会转发任何页面,即不是通过 response.sendRedirect("abc.html"),也不是通过 RequestDispatcher。而我真正需要知道的是jQuery的$.ajax()方法的响应类型是什么。
  • @AnkurJain 你的意思是 .ajax() 请求类型?响应类型是 .ajax 从 servlet 收到的内容。默认的 .ajax() 请求类型是 application/x-www-form-urlencoded。可以通过设置 .ajax() 的 'contentType' 选项来覆盖它
  • @AnkurJain 也是,我知道 servlet 不会转发页面。它不能在ajax调用中。这就是我的观点。
【解决方案2】:

签入您的响应回调函数并编写您想要的编程逻辑

$.ajax({
'url':location,
'type':type,
'success':function(response){
/*write here your logic*/ 
},
'error':function(){
/*you code for error handling*/
}
});

使用javascript重定向窗口

window.location.href = 'your location';

【讨论】:

  • 先生,我已经这样做了,但我需要将此控制权交给 servlet 而不是脚本。!
  • 意思是你想从成功或错误回调函数中调用servlet函数?
【解决方案3】:

您可以在响应的成功或错误函数中使用 window.location = 'yourlocation' 重定向到登录页面(取决于您从服务器获得的响应。如果您将响应代码带入标头 401 错误函数将被执行其他明智的成功)。

但我认为您希望用户在登录后回到他开始的同一页面。

如果您对此感兴趣,可以为此使用 spring security。如果您已经在使用 spring,它很容易集成。 如果您不使用弹簧,您可能会寻找一些替代品。以下链接可能对您有所帮助

Spring Security Ajax login

http://java.dzone.com/articles/implementing-ajax

【讨论】:

  • 好的,先生,你说得对,但是如果我在 ajax 方法中从错误条件指向我的登录页面,那么我可能会收到错误,在这种情况下,我的页面也将被重定向到登录页面。
  • 您是对的,但是您可以根据错误消息在 jQuery 中轻松处理这些内容。您可以参考 jQuery ajax 文档。请参阅错误处理程序。 link。您可以完全控制自己遇到的错误类型。
【解决方案4】:

在 jquery 中找到了 .post() 方法来执行此操作。在操作页面中,您可以做任何您想做的事情。

【讨论】:

  • 密码是什么?这并没有比他已经拥有的 .ajax() 调用更多
猜你喜欢
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 2013-01-03
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多