Как удалить Ajax Request из памяти браузера? - PullRequest
2 голосов
/ 05 мая 2011

У меня есть простая проблема, как я могу удалить хранилище запросов 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 ]

2 голосов
/ 05 мая 2011

Самое простое решение, так как ваша сторона сервера не должна иметь состояния, а переменные не должны кэшироваться для отправки на сервер, поэтому проблема, вероятно, заключается в том, как вы получаете значения.

Браузер может кэшировать при запросе информации с сервера, поэтому было предложено отключить кэширование, но это касается данных, поступающих с сервера.

Итак, я бы предложилвы используете расширение Firebug в Firefox и можете устанавливать точки останова, чтобы видеть, меняются ли значения.

Для каждой части данных настроек вы должны помещать их в переменные, чтобы вы могли легко проверить каждое значение.

Я не создал все переменные, но я хотел показать пример, чтобы помочь вам.

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, так как вы не можетесоответственно изменить это значение при смене пароля.Я ожидаю, что это будет вашей проблемой.

0 голосов
/ 24 июля 2015

ОП написал:


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; ?>" ?>
0 голосов
/ 05 мая 2011

Добавить строку, например, временная метка для запрошенного URL, это предотвращает использование браузером кэшированной версии запрошенного ресурса.

В mootools есть опция noCache для запроса, установите для нее значение true (по умолчанию false, поэтому кеш будет использоваться там без установки опции)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...