当前位置: 首页 > 面试题库 >

如何确定请求是Ajax还是Normal?

晋坚
2023-03-14
问题内容

我想针对AJAX请求与常规请求以不同的方式处理错误。

如何在Struts2操作中确定请求是否为AJAX?


问题答案:

您应该检查请求标头X-Requested-With是否存在并且等于XMLHttpRequest

请注意,并非所有AJAX请求都具有此标头,例如,Struts2 Dojo请求不发送该标头。如果您是使用Struts2-jQuery(或使用任何其他新的AJAX框架)生成AJAX调用,则该文件就在那里。

您可以使用Firebug's Net module… 检查它是否存在,例如,当您对Stack Overflow投票时;)

要从中检查它Struts2 Action,您需要实现ServletRequestAware接口,然后获取Request并检查是否存在特定的标头,如下所示:

public class MyAction extends ActionSupport implements ServletRequestAware {
   private HttpServletRequest request;

   public void setRequest(HttpServletRequest request) {
      this.request = request;
   }

   public HttpServletRequest getRequest() {
      return this.request;
   }

   public String execute() throws Exception{
      boolean ajax = "XMLHttpRequest".equals(
                      getRequest().getHeader("X-Requested-With"));
      if (ajax)
         log.debug("This is an AJAX request");
      else 
         log.debug("This is an ordinary request");

      return SUCCESS;
   }  
}

请注意,您也可以通过ActionContext获取请求,而无需实现ServletRequestAware接口,但这不是推荐的方法:

HttpServletRequest request = ServletActionContext.getRequest();


 类似资料:
  • 我有管理体育锦标赛的项目。它是用PHP/Laravel编写的。我需要在锦标赛运行时,在网页上异步发布比赛结果(“在线”)。我无法决定哪种交流方式更适合我的情况。定期的ajax请求(例如每10秒1个请求)还是WebSockets?你能给我个建议吗?你能不能也提一下这两种方法的利弊?

  • 问题内容: 我想使用C程序来获取网络接口的IP是手动设置还是通过dhcp设置。 我尝试使用以下代码,并且它在Debian中有效,但在OpenWrt中却无效。我想知道如何在OpenWrt中编写一个C程序来执行此操作。我试图用这个: 这段代码在Debian中工作,但是在OpenWrt中却不能正常工作,所以我想知道如何编写程序来获得相同的结果。 问题答案: 对于 OpenWRT, 您可以使用以下命令获取

  • 问题内容: 如何确定变量is 或? 我的代码如下: 但是,如果执行此操作,JavaScript解释器将停止执行。 问题答案: 您可以使用抽象相等运算符的品质来做到这一点: 因为为true,所以上面的代码将同时捕获和。

  • 问题内容: 我在JSF2中使用PrimeFaces。我正在尝试通过将登录名和密码作为Ajax请求发送来对用户进行身份验证。在备用bean的操作方法中,我尝试验证用户,如果验证成功,则重定向到新视图。 使用primefaces可以吗? 因为我认为使用primefaces’ ,所以我只能具有ajax行为或导航。 问题答案: 是的,仅发送重定向而不是(默认)转发作为结果。该稀少JSF 2.0的方式将被追

  • 问题内容: 我将从服务器接收JSON对象或数组,但是我不知道它将是什么。我需要使用JSON,但是要这样做,我需要知道它是对象还是数组。 我正在使用Android。 有没有人有这样做的好方法? 问题答案: 我找到了更好的方法来确定: tokenizer可以返回更多类型:http : //developer.android.com/reference/org/json/JSONTokener.html

  • 问题内容: 我正在使用nodejs和expressjs。我想知道clientRequest对象中是否有类似的东西。我想为Web链接构建baseUrl。因此,如果请求是通过https完成的,我想在所有链接中保留https。 问题答案: 编辑: 对于Express,它更安全,建议使用(如@Andy在下面建议)。尽管它使用类似的实现,但将来可以安全使用,并且还可以选择支持标头。 话虽如此,对于您的用例而