【问题标题】:window.open() call not hitting controller first timewindow.open() 调用第一次没有击中控制器
【发布时间】:2013-01-15 01:17:58
【问题描述】:

请帮我解决这个荒谬的问题。 我通过使用 window.open() 函数从我的 js 表单传递一个 URL,该函数将命中一个控制器方法,并且还包括一些路径变量。 也就是说,

myUrl = "controller/"+pathVar1+"/"+pathVar2+"/controllerMethod?AUTH_TOKEN=" + getAuthTokenId() +"&";

window.open(myUrl,true);

getAuthTokenId() 写在我的“global.js”文件中并且在控制器中我将方法写为

@Controller
@RequestMapping("/controller")
public class ControllerName{

  @RequestMapping(value = "/{pathVar1}/{pathVar2}/controllerMethod", method = RequestMethod.GET)
  public @ResponseBody void ControllerMethodDefinition(HttpServletRequest request, HttpServletResponse response, @PathVariable("pathVar1") String pathVar1,@PathVariable("pathVar2") String pathVar2){
        /***/
    }

} 

现在我的问题是,当第一次 js 执行我从 js 的调用时,它没有击中控制器,但下次每次都击中控制器。

【问题讨论】:

  • 尝试使用浏览器插件工具来调查问题,以确定浏览器是否真的在第一次发送请求。我通常使用一个名为 Tampterdata 的 firefox 插件来显示浏览器和服务器之间的请求和响应流量。如果请求要发送到服务器,请查看它要发送到的 url。

标签: javascript spring spring-mvc controller


【解决方案1】:

对于这个问题,最好的调查方法是:

1) 在您的 window.open() 命令之前和之后放置 alert('Before open ' + myUrl);alert('After open ' + myUrl);,以确保它已被执行。

2) System.out.println("Controller hit. Pathvar 1 = " + pathVar1 + "; Pathvar 2 = " + pathVar2); 在您的控制器中,以确保它确实被击中。

我的猜测是,在第一次您的 URL 未正确初始化时,该命令将无法运行。但不管是什么原因,在你进行了上述 2 次测试之后应该就清楚了。

【讨论】:

  • 非常感谢您给我的建议。 alert('打开前' + myUrl);and alert('打开后' + myUrl);两者都正常工作,并且两次都提供相同的 URL。同时,控制器方法被命中。但是当我在打开警报后单击“确定”时,同样的事情正在发生。所以我的部分目的已经达到,即控制器正在按预期执行,但是在第二次警报上单击“确定”后,我无法控制程序。但是从第二次开始它就可以正常工作了..
  • @user1978891:作为您的回复,我认为这只是一个javascript问题。您可以将其发布为 jsfiddler 页面 (jsfiddle.net) 吗?
  • 这里是链接.. 你可以看到.. sceureDomailUrl 是 "secure/" .. 它在 global.js 中定义...jsfiddle.net/Gvafq
  • 谢谢大家的建议。最后,当我查看我的 HTML 表单时,我得到了答案。谢谢@Long 将我的想法重定向到我的 js 页面。。
  • @Long :- 当然。在我的 html 表单中,我已将输入类型声明为“提交”,并且 onclick 我调用了 js 方法。但输入类型应该是“按钮”。否则,“提交”操作 + onclick 操作都将尝试执行其工作。所以在 onclick 触发了提交操作之后。这就是问题发生的原因..
猜你喜欢
  • 2015-04-01
  • 2019-01-31
  • 2011-01-07
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多