Ajax调用重复在IE中不起作用

时间:2012-01-05 11:30:22

标签: java jquery ajax

我已调用ajax调用将数据(140个大小的字符)保存到数据库中,然后在第一次调用的成功函数中再次调用ajax。 它在FF i中工作正常,当点击该按钮时它将被保存,然后成功检索该数据(我需要这些数据显示时间戳)。但是在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);               
        }
    });
}

3 个答案:

答案 0 :(得分: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
});

我建议你使用第三种选择。

希望这有帮助

答案 1 :(得分:1)

这是因为IE缓存了您的请求。在这种情况下,您可以在输入中添加一个额外参数,例如日期。这将使您的所有通话都独一无二。

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

您可以在服务器端忽略 time 参数。

在你的情况下,它将是

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);               
    }
 });
}

如果这是您正在寻找的答案,请标记答案。感谢。

答案 2 :(得分:0)

在你的ajax调用足够IE 7和8之前放置此函数

$.ajaxSetup ({cache: false});