【问题标题】:How can delete Ajax Request from browser memory?如何从浏览器内存中删除 Ajax 请求?
【发布时间】:2011-08-18 23:04:57
【问题描述】:

我有一个简单的问题,如何将 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();}

【问题讨论】:

  • data: { isc_user_id: id } 我可能弄错了,但在我看来你已经在这里设置了数据,所以当你发送数据时,它总是发送相同的数据。
  • ibrahim 这个id,只用于获取用户行数据。我有一个包含所有记录的列表,并且此列表具有用于编辑或删除的“id”取决于目的,发送表单数据以更新到数据库的请求是 var edit = new Request(...);
  • 而不是发送数据edit.send(data)尝试使用alert(data)进行调试,看看你的数据是否正确

标签: javascript ajax memory mootools


【解决方案1】:

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

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

所以,我建议你在 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 的值,因为在更改密码时您可能没有适当地更改该值。我希望这将是您的问题。

【讨论】:

  • 我试试这个,但变量总是从第一个请求中得到结果
  • @Paridin - 所以这个问题不是 ajax 问题。 id 值有变化吗?我预计不是,这可能是您问题的核心。
  • 是不是 ajax 问题,但理论上我想删除请求,就像我有垃圾收集器一样,因为可能是核心中的错误,在显示要编辑的表单时发现带有 ajax 的信息,我想是因为所有表单都具有相同的名称,所以 mootools 核心始终从第一个表单获取值,所以使用这个基础,我创建了一个动态名称,并且 mootools 总是得到第一个数据表格,但现在表格是独一无二的,所以我明白了。
【解决方案2】:

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

在mootools中有一个用于Request的noCache-option,设置为true。(默认为false,所以缓存将在那里使用而不设置选项)

【讨论】:

  • 这不会帮助用户解决所描述的问题,因为他们已经在更改 password 的值
  • 这样吗? var r = Number(新日期()); url : 'file.php?'+r,我试试这个,但没有任何反应。
  • 'file.php?'+new Date().getTime();(您必须在每个请求上附加一个新的时间戳),但使用 noCache-option 也会这样做。
  • 我没有像 false 这样的 noCache,我尝试 'file.php?'+new Date().getTime();但我有同样的问题......
【解决方案3】:

OP 写道:


修复


好的,在尝试了很多方法来修复之后,我找到了一个解决方案,其中包括创建一个动态表单。我创建了一个随机变量并在之前发送以使用 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; ?>" ?>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
相关资源
最近更新 更多