2015-12-18 4 views
0

Я создал портлет liferay с функцией ajax, приложение работает нормально, но проблема в том, что я говорю, когда я добавляю сценарий ajax на странице jsp, как показано ниже, я смогу передать url {findState}, но если я включу 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> 

Может Anyo пожалуйста скажите мне какое-то решение для этого

ответ

2

$ {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 для других решений этой проблемы.