javascript - 如果脚本文件放置在外部,则无法获取 ${findState} 值

标签 javascript jquery ajax jsp liferay-6.2

我创建了一个具有ajax功能的liferay portlet,该应用程序工作正常,但问题是当我将ajax脚本放入jsp页面中时,如下所示,我将能够传递${findState} url但是如果我将 javascipt 包含在 js 文件外部并尝试触发 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的答案此类问题的其他解决方案。

关于javascript - 如果脚本文件放置在外部,则无法获取 ${findState} 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34356479/

相关文章:

javascript - ajax提交表单为什么不能回显$_POST

javascript - "grunt watch"总是在发生 fatal error 后停止监视 - 如何让它在几秒钟后自动重试?

javascript - React-router-dom 不工作

javascript - Electron 保存为将长服务器 URL 作为标题

jquery - 从ajax更新div内容时闪烁

javascript - 使用 jquery 和 css 单击按钮后旋转 div 文本

javascript - 如何在 sonar-project.properties 中指定通配符

javascript - 在我自己的 js 模板系统/引擎中使用 jquery 选择

javascript - AJAX 加载后触发 Jquery slider

PHP Jquery JSON 捕获