2016-07-01 18 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中。

瘋了。