如何从浏览器内存中删除Ajax请求?

时间:2011-05-04 23:29:26

标签: javascript ajax memory mootools

我有一个简单的问题,如何将ajax请求存储删除到内存中。我会试着解释一下我会想要得到什么。

我有一个用于将表编辑到数据库中的表单。

第一次运行良好,但问题是再试一次。如果我不刷新页面,它总是从第一个请求发送相同的数据。

示例:

进入数据库我

id
user
password

我有一个具有相同参数的表单,我用ajax调用了这个表单。

我从数据库编辑了一个寄存器,我发送了编辑过的数据并运行良好,但是在浏览器内存中存储了请求。

我尝试再次编辑相同的寄存器,但是当我再次发送时,数据与第一次相同。

如果第一次发送:

user : 'userx'
password : 'usex1234'

当我再次尝试编辑此寄存器时,例如:

user: 'userxx'
password : 'password1234'

最后,数据发送具有这些值

user : 'userx'
password : 'usex1234'

如何解决这个问题?我想删除第一个请求,但我不能。 我想在没有f5或刷新的情况下从浏览器中清理内存,因为只有f5才能再次运行。

我试过了:

request = new Request();

request = null;但没有发生任何事情

delete request;但是相同,没有任何变化。

谁可以帮助我?

我的代码:


function _update(id){
    var n = Number(new Date());
    var edit = new Request({
        url: 'users/edit?'+new Date().getTime(),
        noCache: true,
        onRequest: function(){
            $('dark').setStyle('display','block');
        },
        onSuccess: function(data){
            $('dark').setStyle('display','none');
            box_edit.close();
            update();
        },
        onComplete: function(response){
            console.log(response);
        },
        onFailure: function(){
            Sexy.error("Ocurrio un error procesando su solicitud, intente más tarde.");
        }   
});

var box_edit = new LightFace.Request({
    url: 'users/edit?'+new Date().getTime(),
    draggable:true,
    title: 'Editar usuario.',
    request:{
        method: 'post',
        data: { isc_user_id: id }
    },
    buttons: [ { title: 'Editar', color:'blue', event: function(){
    var id__ = $('isc_user_frm_id_'+id).get('value');
            if (before_update(id__)){
                if ( $('isc_password_'+id__).get('value')=='' && $('isc_re-password_'+id__).get('value')==''){
                    var data = 'userEdit=Ok&isc_user='+$('isc_user_'+id__).get('value')+'&isc_group='+$('isc_group_'+id__).getSelected().get('name')+'&isc_user_id='+ id;
                }else{
                    var data = 'userEdit=Ok&isc_user='+$('isc_user_'+id__).get('value')+'&isc_password='+hex_md5($('isc_password_'+id__).get('value'))+'&isc_group='+$('isc_group_'+id__).getSelected().get('name')+'&isc_user_id='+ id;
                }
                edit.send(data);
            }
        } 
    },
    { title:'Cancelar', event:function(){ this.close(); } }]
});
box_edit.open();}

3 个答案:

答案 0 :(得分:2)

最简单的解决方案,因为您的服务器端应该是无状态的,并且不应缓存变量以发送到服务器,因此问题可能在于您获取值的方式。

浏览器在从服务器请求信息时可能会缓存,这就是为什么建议关闭缓存,但这是来自服务器的数据。

所以,我建议你在Firefox上使用Firebug扩展,你可以输入断点来查看值是否在变化。

对于设置数据的每个部分,您应该将它们放在变量中,以便您可以轻松地检查每个值。

我没有创建所有变量,但我想展示一个例子来帮助你。

var val1 = $('isc_user_'+id__).get('value');
var val2 = $('isc_password_'+id__).get('value');
var data = 'userEdit=Ok&isc_user='+$('isc_user_'+id__).get('value')+'&isc_password='+hex_md5($('isc_password_'+id__).get('value'))+'&isc_group='+$('isc_group_'+id__).getSelected().get('name')+'&isc_user_id='+ id;

您还需要查看id的值,因为在更改密码时可能无法正确更改该值。我希望这会是你的问题。

答案 1 :(得分:0)

附加一个字符串,例如这是所请求网址的时间戳,这可以防止浏览器使用所请求资源的缓存版本。

在mootools中有一个请求的noCache选项,将其设置为true。(默认为false,因此将在那里使用缓存而不设置选项)

答案 2 :(得分:0)

OP写道:

        

FIX

           

好的,经过多种修复方法后,我找到了一个解决方案,其中包括创建一个动态表单。我创建了一个随机变量并在之前发送以获取带有ajax的表单,在将此值恢复到服务器代码后,我将此值设置为表单的名称,并且我有一个动态表单。有了这个,我解决了这个问题。

     

示例

function rand(){
    return Math.floor(Math.random()*1000);
}


function _update(id){
var form_rand = rand();
...
data: { isc_user_id: id , form_rand : form_rand }
...
     

立即获取价值:

var id__ = $('isc_user_frm_id_'+id+form_rand).get('value');
     

进入html我和隐藏的输入如下:

<input type="hidden" id="isc_user_frm_id_<?php echo $form_rand; ?>" value="<?php echo $r; ?>" ?>