2015-09-22 54 views
2

出於某種原因,我得到我的Angularjs應用以下錯誤:在主線程同步的XMLHttpRequest被廢棄的錯誤

在主線程同步的XMLHttpRequest是因爲其所帶來的影響最終用戶的體驗棄用。

由於我沒有得到線索是什麼導致它,我不知道什麼代碼分享? 當我導航到一個狀態(UI路由器)但沒有與此狀態相關的控制器時,會出現此問題。

以前有人看過這個嗎?

+0

你有一個同步AJAX請求的地方? – tymeJV

+0

如果它不是很多的代碼 - 共享它的全部;-) 如果您使用SCM(例如git)共享所有已更改的代碼 –

+0

我認爲問題在於您正在使用同步XMLHttpRequest並且主線程上的同步XMLHttpRequest已被棄用,因爲它對最終用戶的體驗有不利影響。 – Jan

回答

3

這是由於嘗試從瀏覽器進行同步AJAX調用所致。作爲參數傳遞給任何jQuery的Ajax調用的

async: false 

如果Ajax調用通過jQuery做,那麼它使用時引起的。

xmlhttp.open(...) 

設置爲false

如果它與本地XMLHttpRequest做,那麼當第三個參數它引起的。


所以,問題的根源是從您的網頁Javascript調用ajax調用。您將不得不檢查所有發生Ajax調用的地方,並找到一個設置錯誤參數的地方,修復參數並(可能)重做響應處理以使用異步響應。


下面的是關於單向一些文章,同步Ajax調用在角製成,因此它可能給你一個想法要尋找什麼:

How to $http Synchronous call with AngularJS

How to create synchronous using $http in angular.js

由於角只是默認情況下是異步的,它看起來像你必須走出自己的方式來創建自己的服務。爲此,您將使用原生XMLHttpRequest對象,因此您可能只需編寫XMLHttpRequest的代碼並查看引用的位置,然後在該附近找到.open()調用。

+0

添加了對幾篇文章的參考,這些文章討論瞭如何在AngularJS中執行同步Ajax,這應該能讓你知道要尋找什麼。 – jfriend00

+0

但我不明白如何導航到一個甚至沒有控制器的狀態將觸發此錯誤。 – tommyd456

+0

@ tommyd456 - 沒有能力瀏覽您的代碼,我們無法做更多的事情來幫助您 - 我已經解釋了儘可能多的理論 - 其餘部分只是代碼中的偵探工作。顯然,在你的代碼中有一個同步的Ajax調用。有些人嘗試使用同步Ajax的地方在'onunload'處理程序中(因爲異步Ajax在那裏不起作用),因此可能只是一個地方。 – jfriend00

1

我在生產服務器有相同的Synchronous XMLHttpRequest on the main thread is deprecated,同時對我的當地環境沒有這樣的錯誤。

在此我的情況是因情況不匹配模板名稱VS爵士請求:

  • AngularJS(在我的境遇指令)的請求小寫mytemplate.tmpl.html
  • 模板文件與駝峯命名爲: myTemplate.tmpl.html

什麼困惑的問題是,指令/模板(由於OSX case-insensitivity)工作的罰款在Mac上 - 但是,當推到了一個Linux case-sensitive AWS親失敗管理服務器。

將模板文件名更改爲小寫修復了問題。

正如上面的評論之一所述,AJAX錯誤是誤導性的,因爲它暗示着調用本身有問題,而不僅僅是文件「缺失」。

相關問題