2016-05-03 89 views
-2

我需要在經典ASP中將服務器變量的值傳遞給Javascript。我寫了下面的代碼在我的ASP文件經典ASP打印變量名稱而不是值

<% 
str = "<chart caption=\"Monthly revenue for last year\" subcaption=\"Harry&#39;s SuperMart\" xaxisname=\"Month\" yaxisname=\"Revenues (In USD)\" numberprefix=\"$\" theme=\"fint\"> <set label=\"Jan\" value=\"420000\" /> <set label=\"Feb\" value=\"810000\" /> <set label=\"Mar\" value=\"720000\" /> <set label=\"Apr\" value=\"550000\" /> <set label=\"May\" value=\"910000\" /> <set label=\"Jun\" value=\"510000\" /> <set label=\"Jul\" value=\"680000\" /> <set label=\"Aug\" value=\"620000\" /> <set label=\"Sep\" value=\"610000\" /> <set label=\"Oct\" value=\"490000\" /> <set label=\"Nov\" value=\"900000\" /> <set label=\"Dec\" value=\"730000\" /></chart>" 

%> 
<script type="text/javascript">alert("<%=str%>")</script> 

現在的問題是它始終顯示爲「<%= STR%>」,而不是STR

+0

你是不是缺少一個暗淡或無效的聲明str var? – Avner

+1

這可能是一個愚蠢的問題,但你實際上是通過IIS查看你的asp文件,而不是在瀏覽器本地打開它? – John

+1

此外,您已將此標記爲VBScript,因此推測VBScript是您的服務器端語言。避免VBS中雙引號的方法是將它們輸入兩次而不是使用反斜槓 - 例如'<% str =「 John

回答

0

我使用單引號的值警報,沒有問題。因此,嘗試

<script type="text/javascript">alert('<%=str%>')</script> 
+0

單引號,雙引號都應該像客戶端一樣工作,並保持「原樣」,並且都是JavaScript中接受的字符串容器字符。 '<%=str%>'在服務器端被處理之後纔會返回給客戶端。很可能ASP預處理器不會處理這個頁面,只是將文本'<%=str%>'作爲文本而不是預處理它。 – Lankymart

+0

@Lankymart,雖然你是正確的,在警報上使用單引號或雙引號都可以工作,因爲OP向警報注入ASP字符串變量,而不是引用字符串的變量,ASP字符串變量中的雙引號衝突用JavaScript開始/結束引號。 –

+0

@GaryRichter對不起,但你的錯,如果它與客戶端有任何關係,OP不會看到'<%=str%>'。實際上就正確形成的字符串而言'str'的​​構造不正確,如果ASP正在處理它,則會出現語法錯誤*(因爲VBScript字符串中的'「'需要加倍才能正確轉義,無論任何JavaScript轉義會影響客戶端)*。 – Lankymart

0

第一,ASP不使用斜線允許引號字符的使用,它採用兩個雙引號。因此,所有「\」的實例應該改爲「」來創建一個雙引號字符。其次,如果你正在做一個以雙引號開頭的JavaScript警報,那麼雙引號內的值也不能包含它們(因爲它們基本上阻止了字符串被警告,這不是預期的效果)在上面的代碼示例中,它看起來像是在提醒<%= str%>,但是如果您執行查看源代碼,則會看到實際上發出警報該海峽的「價值」它創建這個JavaScript爛攤子:

<script type="text/javascript">alert("<chart caption="Monthly revenue for last year" subcaption="Harry&#39;s SuperMart" xaxisname="Month" yaxisname="Revenues (In USD)" numberprefix="$" theme="fint"> <set label="Jan" value="420000" /> <set label="Feb" value="810000" /> <set label="Mar" value="720000" /> <set label="Apr" value="550000" /> <set label="May" value="910000" /> <set label="Jun" value="510000" /> <set label="Jul" value="680000" /> <set label="Aug" value="620000" /> <set label="Sep" value="610000" /> <set label="Oct" value="490000" /> <set label="Nov" value="900000" /> <set label="Dec" value="730000" /></chart>");</script> 

所以我不知道你爲什麼會想提醒怪異的字符串,但如果你開始/結束與單引號的警報,你不會與你的ASP變量的雙引號有衝突,你至少會得到警報。

我測試了上述的變化,它驚動得很好

+0

如果ASP字符串正確形成,你就不會有任何衝突。即'str =「<圖表說明= \「」每月收入... \「」...>「'*('...'表示其他屬性等的假定代碼)*。 – Lankymart

+0

傳統ASP可以使用JScript編寫,它是JavaScript 。問題中的語法和格式只是fi嗯,問題是,OP沒有正確使用IIS。 –

+0

@ShadowWizard它可以,但我懷疑他們正在使用JScript,語句不是以';'結尾*(它也被標記爲[tag:vbscript],但這永遠不會定論)*。我仍然認爲這個問題歸結爲ASP處理程序永遠不會執行,可能是因爲沒有在IIS中設置。還認爲他們故意在字符串中使用'\「',因爲他們期望字符串顯示在JavaScript客戶端,事情是爲了工作,他們缺少'''''在ASP中先轉義它們,這樣只是'\「'將被髮送到客戶端。 – Lankymart