2016-07-01 17 views
0

这将是一个困难的解释,但基本上我有一个角色的应用程序与一个登录表单运行一个函数提交发送一个ajax请求到服务器做登录。形式发布参数结束在URL

现在,我没有使用NG提交劫持,但像这样在正常提交属性:

<form my-form submit="controllername.doSubmit()"> 

然后我有一个名为“我型”的角度指令,它使用{要求:“形式” }在它的定义对象,然后执行此操作在postLink功能:

element.bind('submit', function(event) 
{ 
    // Removed for brevity 

    scope.$apply(scope.submit); 
}); 

所以,基本上这个表单提交的东西是很久以前写的,并做了很多其他的东西,像是预设触发表单验证和东西,所以我不会重写任何这个或回到使用ng-subm它。除此之外,我还有一些使用这些代码的大型应用程序,这些应用程序需要改变很多。

无论如何,它在表面上都可以正常工作,但是如果我填写表单中的日志,然后执行其他一些操作(包括填写其他形式设置相同的方式),然后离开我的笔记本电脑几天,回到页面,不知何故,所有的表单数据已被添加到URL栏中,之后??并在#包括明文视图中的密码之前!

不知道为什么这不会马上发生,ony睡眠后,并不总是。另一个奇怪的是,参数的名称不是原来的(电子邮件,密码),而是当前页面上第一个表单的参数名称(actionStatus,必需),所以Chrome显然变得非常困惑。

我的直觉告诉我,当表单被提交时,formData被存储在某个地方供以后使用,因为当我运行我的javascript函数并且因为它是单个页面时,我没有正确取消表单的默认操作formData永远不会离开内存的应用程序。然后它认为它已经进入了一个新页面并将这些数据放入URl中,但是由于页面上的表单发生了变化,所以名称错误。

对不起,我不能提供更多的代码,只是一个相当毛茸茸的描述,但我不知道还有什么可说的,这一切都很奇怪。

+1

您的页面上的某些内容正在执行GET请求。没有看到所有的AJAX调用代码,然而很难说出问题出在哪里。通过页面上的所有脚本查看任何可以进行任何类型AJAX调用的任何脚本,并查找setTimeout调用等。 – ManoDestra

+1

我使用Angular的$ http.get()很多,但登录表单不是所示。那么在某些情况下,ajax获取请求会将formData放入URL中? – jonhobbs

+0

任何GET请求将具有URL的查询字符串中的参数。当然,不一定非常明显,取决于请求,但是如果您正在进行任何类型的GET请求,并且您传递的是密码等内容,那么最终用户,AJAX或其他方式都可能会看到它们。 – ManoDestra

回答

2

我终于对此有了答案,答案完全出乎意料。

我使用一个名为browserSync的插件来同步我测试的多个浏览器,并且它具有一个称为表单同步的功能。

我有铬打开,当我打开另一个浏览器(通常在早上电脑第一次醒来时),我不得不登录,因为他们在不同的页面上,它是从我的Firefox登录细节复制到第一个在我现有的Chrome窗口中找到它。它也将Firefox登录表单的内容放入了Chrome的URL中。

疯了。