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