2012-01-05 2 views
1

Я вызвал вызов ajax для сохранения данных (140 символов размера) в базу данных, а затем снова получил вызов ajax в функции успеха первого вызова. Он работает нормально в FF i, e, когда нажимает эту кнопку, он будет сохранен, а затем извлечен, что данные успешно (мне нужно, чтобы эти данные отображались с отметкой времени). Но в IE он работает нормально только один раз, означает, что при нажатии кнопки набор данных будет сохранен, а затем отобразится, но снова нажмите кнопку сохранения другого набора данных, но не показывая эти данные, он показывает предыдущие данные. любое решение мой кодПовторение вызова Ajax не работает в IE

function save(){ 
    $.ajax({ 
     url : 'saveNote.html?note=' + notes, 
     success : function() { 
      // showNote(); //this is also not working in IE 
      setTimeout(function() { showNote(); }, 1000); 
      document.getElementById('notes').value=""; 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
      alert('my error = ' + thrownError); 
      alert('my error1 = ' + ajaxOptions); 
      alert('my error2 = ' + xhr);    
     } 
    }); 
} 

function showNote(){ 
    $.ajax({ 
     url : 'getNote.html', 
     method : "GET", 
     dataType: "json", 
     success : function(data) { 
      responseNote=data; 
      showLabel(responseNote); 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
      alert('my error = ' + thrownError); 
      alert('my error1 = ' + ajaxOptions); 
      alert('my error2 = ' + xhr);    
     } 
    }); 
} 
+0

Вы можете разместить код JS, который вызывает 'сохранить()' и 'showNote () '? –

+0

на самом деле он сохраняется в БД с временной отметкой, но не вызывает второй аякс (для извлечения), а второй набор данных - я имею в виду нажатие кнопки второй раз. –

+0

save() вызывает из onclick кнопки в jsp –

ответ

4

IE, как известно, кэширует запросы AJAX. Таким образом, последующий запрос генерирует такой же результат. Существует несколько способов преодоления этой проблемы. Вот некоторые из них:

Источник: Viralpatel's Blogs

1. Приложить случайное число с запросом

$.ajax({ 
     url: url, 
     data: inputs + '&ran=' + Math.rand(), 
    )}; 

2. Приложить дату с запросом

$.ajax({ 
     url: url, 
     data: inputs + '&time=' + new Date(), 
    )}; 

3. Отключить кеш jQuery

$.ajaxSetup ({ 
    // Disable caching of AJAX responses 
    cache: false 
}); 

Я предлагаю вам использовать третий вариант.

Надеется, что это помогает

+0

Yes Ur right Я хочу не только решение, но и причину проблемы. Я думал, что это может быть проблема с кешем, но я не уверен, потому что я новичок в программировании. Еще раз спасибо. Я попробовал, и теперь он работает нормально. –

1

Это потому, что IE кэшировал ваш запрос. В этом случае вы добавляете один дополнительный параметр к своим входам, например, по дате. Это сделает ваши звонки уникальными.

$.ajax({ 
     url: url, 
     beforeSend: function (data) { }, 
     data: inputs + '&time=' + new Date(), 
     success: function (data) { }, 
     error: function (data) { } 
    )}; 

Это время параметр можно игнорировать на стороне сервера.

В вашем случае это будет

function save(){ 
$.ajax({ 
    url : 'saveNote.html?note=' + notes + '&time=' + new Date(), 
    success : function() { 
     // showNote(); //this is also not working in IE 
     setTimeout(function() { showNote(); }, 1000); 
     document.getElementById('notes').value=""; 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     alert('my error = ' + thrownError); 
     alert('my error1 = ' + ajaxOptions); 
     alert('my error2 = ' + xhr);    
    } 
    }); 
} 

function showNote(){ 
$.ajax({ 
    url : 'getNote.html' + '&time=' + new Date(), 
    method : "GET", 
    dataType: "json", 
    success : function(data) { 
     responseNote=data; 
     showLabel(responseNote); 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     alert('my error = ' + thrownError); 
     alert('my error1 = ' + ajaxOptions); 
     alert('my error2 = ' + xhr);    
    } 
}); 
} 

Пожалуйста, отметьте ответ, если это ответ, который вы ищете. Благодарю.

+0

на самом деле он сохраняется в БД с отметкой времени успешно, но не вызывает второй аякс (для извлечения), а второй набор данных - я имею в виду нажатие кнопки второй раз. он показывает предыдущие данные из кеша. pls help me –

+0

Хотя технически правильно, есть намного более простой способ сделать это. Метод jQuery '.ajax()' имеет параметр 'cache', который при установке' false' автоматически добавит эту метку времени для вас. Если вы собираетесь выполнять много вызовов ajax, и вы хотите, чтобы ни один (или только очень немногие) из них не был кэширован, вы также можете вызвать '$.ajaxSetup ({cache: false}); 'установить для свойства cache значение false для всех вызовов методов' .ajax() ',' .get() 'и' .post() '. –

+0

Попробуйте код, который я предоставил. Он должен работать. Если есть какие-либо проблемы, пожалуйста, сообщите подробности. –

0

Поместите эту функцию перед вашим Ajax вызова достаточно для IE 7 и 8

$.ajaxSetup ({cache: false}); 
+0

вирусный патэл уже сказал это. –

Смежные вопросы