2012-08-01 111 views
2

JavaScript的變種右胡蘿蔔給出了奇怪的結果

當我運行這段代碼:

var newHtml = "<>jsp:include page=m_searchform.jsp "; 

它加載了罰款。爲什麼在字符串末尾的右邊的胡蘿蔔會給我這樣的問題?

我真正想要做的就是把這個變成一些DIV的innerHTML:

<div id = "searchWrapper"> 
<form style="vertical-align:50%;" name = "searchForm" action="m_search.jsp"> 
<input class="searchBox" type="search" name="w"/> 
<input class = "greenBtn" type="submit" value="Search"/></form> 
</div> 

但是,這不是工作要麼。我在所有引號之前加上反斜槓,但我確定我錯過了其他五件事和三個巨大的概念。

+2

不JSP提供某種設施爲HTML編碼的文本/輸出? – 2012-08-01 19:04:29

+0

分配var對我來說工作正常,至少在Chrome控制檯中... http://cl.ly/image/0f3X1f0q1Y2A什麼是錯誤?代碼的其餘部分是什麼? – rybosome 2012-08-01 19:04:30

+0

他說它沒有出現,因爲它沒有,它不是一個有效的HTML標記,所以它甚至不能繪製。他將不得不提取該jsp包含的包裝器代碼,並在他的js變量賦值中使用該html。 – SublymeRick 2012-08-01 19:07:32

回答

2

嘗試使用& lt;和& gt;如果你想在字符顯示出來

編輯#2:

按epascarello的答案(和評論),我的編輯#2將不會對自身不夠。您將需要從該JSP包含文件中提取所有換行符,或者您需要使用搜索和替換功能來在輸出文本之前替換換行符之前的換行符,所有這些都在JSP的一端。

我想出來 - 大聲笑,你可以在JavaScript中使用你的JSP標籤,就像你正在做的一樣,但是,你的頁面無法加載並且出現錯誤的原因是因爲你的服務器解析了那個JSP標籤(當你有它正確寫入),並因此注入html。我想這可能會起作用,但是你必須將你的JSP標籤包裝在一個單引號中,而不是雙引號,因爲服務器將要注入的HTML將會在其中引入一堆雙引號!

所以只是這樣做:

var newHtml = '<jsp:include page=m_searchform.jsp>'; 

編輯#1:

你必須做這樣的事情,因爲你不能從插入JavaScript的JSP標籤。服務器在JS執行開始之前完成解析JSP。

var newhtml = '<div id = "searchWrapper"> 
<form style="vertical-align:50%;" name = "searchForm" action="m_search.jsp"> 
<input class="searchBox" type="search" name="w"/> 
<input class = "greenBtn" type="submit" value="Search"/></form> 
</div>'; 


someObject.innerHTML = newhtml; 
+0

我並不積極,但我認爲JSP標籤是服務器端,所以你不能通過JavaScript加載它們,服務器不會在這一點上解析...我可能是錯的,但我從來沒有使用JSP,儘管我認爲它像PHP一樣分析了它的服務器。 – SublymeRick 2012-08-01 19:04:27

+0

那對我來說可能是一個潛在的問題。 – 2012-08-01 19:12:59

+0

看到我編輯的答案:) – SublymeRick 2012-08-01 19:17:48

1

因此,當您這樣做時,您希望服務器將HTML內容添加到JavaScript變量中。

var newHtml = "<jsp:include page=m_searchform.jsp> "; 

當您查看網頁的源文件會是這個樣子

var newHtml = "<input type="text" name="asdasdas" /> 
<input type="text" name="sdfsdf" /> 
<input type="text" name="werwe" />"; 

這不是有效的JavaScript

+0

這是完全正確的,爲什麼他應該換成單引號而不是雙引號! – SublymeRick 2012-08-01 19:28:39

+0

實際上單引號不會有幫助,因爲會有新行,並且這些新行會導致錯誤。 – epascarello 2012-08-01 19:36:53

+0

嗯。衛生署!他將不得不使用相當於preg_replace的jsp並刪除換行符... – SublymeRick 2012-08-01 19:38:09

0

<>&()將它們放入一個HTML之前,你應該逃脫HTML字符文件。

string.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split("(").join("&#40;").split(")").join("&#41;") 

應該做的伎倆

+0

您錯過了它,就像我在開始時一樣...他試圖注入JSP代碼進行解析,這不會發生,因爲他不再服務器端了在js執行點。 – SublymeRick 2012-08-01 19:08:48

+0

哦,對。 JS是客戶端,JSP是服務器端。注入這隻會將字符串放入頁面;它不會被解析。如果Chase想要調用JSP,這不是要走的路。 – Zaq 2012-08-01 19:13:39