У меня есть страница Bootstrap, которая, среди прочего, позволяет пользователю открывать модальный «добавить событие», вводить текст в текстовое поле и отправлять его. Когда пользователь открывает модальное окно, текстовое поле должно быть предварительно заполнено последним введенным текстом, так как большую часть времени они просто должны его изменить.Загрузочный модальный контент, кэшированный в Internet Explorer
После того, как пользователь ввел свой текст и нажал кнопку отправки, он делает вызов ajax для сохранения нового текста и динамически заменяет соответствующий раздел текста на родительском экране, а затем скрывает модальный (то есть все без обновления родительская страница).
Это все работает нормально, пока кто-то не вводит какой-либо новый текст в модальном виде и не отправляет его. Проблема в том, что если пользователь снова снова открывает тот же модальный, то отображается текст , а не самый последний текст.
Основываясь на моем тестировании, это происходит в IE9, но не в Chrome, поэтому, похоже, это проблема кеширования. Я пробовал всевозможные предложения вроде $ ('# your-modal'). RemoveData ('bs.modal'); попытаться очистить кэш модаля, когда он скрыт, но ничего не работает.
Пример кода, я использую это:
Ссылка
<a href="EventAdd_Form.cfm?<cfoutput>#GetRequiredParams()#&eventType=background</cfoutput>" data-target="#addEventModal" data-toggle="modal" class="btn btn-primary btn-sm btn-openModal" title="Add a background"><span class="glyphicon glyphicon-plus"></span> Add</a>
Модальные разметки на родительской странице
<!--- Add new event modal --->
<div class="modal modal-wide" id="addEventModal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<!--- Content dynamically generated --->
</div>
</div>
EventAdd_Form.cfm (загружаются в модальном)
<cfset data = GetData(URL.param1, URL.param2, userType)>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div class="modal-body">
<cfoutput>
<!--- Main form --->
<form name="addEventForm" id="addEventForm" role="form" method="get" action="EventAdd_Action.cfm">
<div class="form-group">
<textarea name="eventText" id="eventText" class="form-control textarea-animate" rows="6" maxlength="1000"
data-bv-notempty="true"
data-bv-notempty-message="Please enter some text to continue"
data-bv-stringlength="true"
data-bv-stringlength-max="1000"
data-bv-stringlength-message="You have exceeded the maximum number of characters for this field">#data#</textarea>
</div>
<button type="submit" class="btn btn-primary btn-sm"><span class="glyphicon glyphicon-ok"></span> Submit</button>
</form>
<!--- /Main form --->
</cfoutput>
</div>
JQuery, который работает, когда addEvent модальный отображается
$('#addEventModal').on('shown.bs.modal', function(){
$('form').bootstrapValidator().on('success.form.bv', function(e){
e.preventDefault();
$.ajax({
type: 'GET',
cache: false,
url: 'EventAdd_Action.cfm?<cfoutput>#GetRequiredParams()#</cfoutput>&eventType=' + thisEventType + '&eventText=' + encodeURIComponent(thisEventText) + '&userType=' + thisUserType,
success: function(response){
//Hide the modal window
$('#addEventModal').modal('hide');
...Do some other stuff here - update the text on the parent window etc...
});
}
Любые идеи о том, почему это кэшируются в IE будет оценено.
Я использую Bootstrap css версии 3.3.2 и js версии 3.2.0.
Спасибо, это предложение действительно помогло мне. Я закончил тем, что просто добавил параметр «nocache» в конец URL-адреса, и я просто заменяю его произвольно сгенерированным номером каждый раз, когда нажимается ссылка. Кажется, хорошо работает. – jj2