2010-09-29 55 views

回答

7

Eval不是異步的,所以你不需要回調。把你的函數調用放在下一行。

您正在執行的腳本可能會執行一些異步操作,在這種情況下,您需要解析JS,找到異步代碼並向其添加回調(以字符串形式)。

最好儘量避免eval。這幾乎從來都不是問題的正確解決方案。

+0

對於eval(data)來說,這是一個很好的選擇,因爲我在加載js後調用異步請求。但是如果我清理了我的XSS,還有什麼需要擔心的嗎?你有什麼建議嗎? – Trip 2010-09-29 15:33:56

+0

eval很難調試,有確定範圍的問題,而且速度很慢。我不能提出一種替代解決方案 - 我不知道這個問題,只有你認爲可以解決的問題。 – Quentin 2010-09-29 15:37:17

+0

+1爲「最好避免評估eval」。 Eval可能會產生一堆問題(包括安全風險,使代碼縮小等非常困難)。 – JasCav 2010-09-29 15:42:58

1

只需將要在回調中執行的代碼放入要評估的數據中即可。當然,如果在評估數據中有一些異步運行的動態生成函數,則會遇到問題。

+0

我試圖超出'data' – Trip 2010-09-29 15:28:23

+1

爲什麼?你可以用用戶數據+ ='my_function();' – 2010-09-29 15:31:35

1

eval(data)是一個阻塞呼叫。您只需在eval()調用後放置「回調」代碼,並在eval()完成後執行。

相關問題