如果脚本文件放在外面,则不会获取 ${findState} 值
${findState} value is not getting if script file placed outside
我创建了一个具有 ajax 功能的 liferay portlet,该应用程序运行良好,但问题是当我将 ajax 脚本放入 jsp 页面时,就像这样如下所示,我将能够传递 ${findState} url 但如果我在 js 文件中包含 javascipt 并尝试触发 ajax 我没有得到 ${findState} 的值并显示错误。
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<portlet:resourceURL id="findState" var="findState" ></portlet:resourceURL>
<script type="text/javascript">
$(document).ready(function(){
$( "#country" ).change(function() {
$.ajax({
url: "${findState}" ,
type: 'POST',
datatype:'json',
data: {
countryName: $("#country").val()
},
success: function(data){
var content= JSON.parse(data);
$('#state').html('');// to clear the previous option
$.each(content, function(i, state) {
$('#state').append($('<option>').text(state.name).attr('value', state.stateId));
});
}
});
});
});
</script>
<b>Change the Country State Change By Ajax</b> <br><br>
Country:
<select id="country" name="country">
<option value="select">Select Country</option>
<option value="india">India</option>
<option value="usa">USA</option>
</select>
<br><br>
State:
<select id="state" name="state">
</select>
谁能告诉我一些解决方法
${findState} 是 JSP 引擎在服务器上处理的表达式语言变量。所以在运行时,在浏览器中,url: "${findState}"
属性 实际上是 url: "someUrlString"
。
当您将代码的 Javascript 部分移动到单独的 js 文件中时,服务器(JSP 引擎)将不再处理该文件。
我的建议是将 ajax 调用包装在单独的 js 文件(例如名为 yourJavascriptFile.js
)中的函数中,其中包含以下内容:
var callAjax = function(ajaxUrl) {
$.ajax({
url: ajaxUrl ,
type: 'POST',
datatype:'json',
data: {
countryName: $("#country").val()
},
success: function(data){
var content= JSON.parse(data);
$('#state').html('');// to clear the previous option
$.each(content, function(i, state) {
$('#state').append($('<option>').text(state.name).attr('value', state.stateId));
});
}
});
}
那么您的 JSP 应该具有以下内容:
<script src="yourJavascriptFile.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$( "#country" ).change(function() {
callAjax("${findState}");
});
});
</script>
换句话说,您试图将表达式语言变量混合到不会被您的服务器引擎执行的外部 JS 文件中。有关此类问题的其他解决方案,请参阅 this question 的答案。
我创建了一个具有 ajax 功能的 liferay portlet,该应用程序运行良好,但问题是当我将 ajax 脚本放入 jsp 页面时,就像这样如下所示,我将能够传递 ${findState} url 但如果我在 js 文件中包含 javascipt 并尝试触发 ajax 我没有得到 ${findState} 的值并显示错误。
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<portlet:resourceURL id="findState" var="findState" ></portlet:resourceURL>
<script type="text/javascript">
$(document).ready(function(){
$( "#country" ).change(function() {
$.ajax({
url: "${findState}" ,
type: 'POST',
datatype:'json',
data: {
countryName: $("#country").val()
},
success: function(data){
var content= JSON.parse(data);
$('#state').html('');// to clear the previous option
$.each(content, function(i, state) {
$('#state').append($('<option>').text(state.name).attr('value', state.stateId));
});
}
});
});
});
</script>
<b>Change the Country State Change By Ajax</b> <br><br>
Country:
<select id="country" name="country">
<option value="select">Select Country</option>
<option value="india">India</option>
<option value="usa">USA</option>
</select>
<br><br>
State:
<select id="state" name="state">
</select>
谁能告诉我一些解决方法
${findState} 是 JSP 引擎在服务器上处理的表达式语言变量。所以在运行时,在浏览器中,url: "${findState}"
属性 实际上是 url: "someUrlString"
。
当您将代码的 Javascript 部分移动到单独的 js 文件中时,服务器(JSP 引擎)将不再处理该文件。
我的建议是将 ajax 调用包装在单独的 js 文件(例如名为 yourJavascriptFile.js
)中的函数中,其中包含以下内容:
var callAjax = function(ajaxUrl) {
$.ajax({
url: ajaxUrl ,
type: 'POST',
datatype:'json',
data: {
countryName: $("#country").val()
},
success: function(data){
var content= JSON.parse(data);
$('#state').html('');// to clear the previous option
$.each(content, function(i, state) {
$('#state').append($('<option>').text(state.name).attr('value', state.stateId));
});
}
});
}
那么您的 JSP 应该具有以下内容:
<script src="yourJavascriptFile.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$( "#country" ).change(function() {
callAjax("${findState}");
});
});
</script>
换句话说,您试图将表达式语言变量混合到不会被您的服务器引擎执行的外部 JS 文件中。有关此类问题的其他解决方案,请参阅 this question 的答案。