AJAX / вызов сброса прототипа - PullRequest
0 голосов
/ 30 ноября 2010

У меня есть вопрос, связанный с AJAX / прототипом. У меня есть вызов AJAX, в настоящее время встроенный в onclick (я обещаю, что переместу его оттуда :) событие, похожее на это:

onclick="var pn = $('yards').value; $('inventory').update('Working...');
new Ajax.Updater('inventory','ajax.php?ac=checkInventory&productID='.$someproductid.'&yards='+pn,{method:'get', evalScripts: true, asynchronous: true, onComplete:function(tr){$('inventory').update(tr.responseText);}});"

Файл с именем ajax.php затем получает данные из $ _GET [], отображает небольшое поле ввода текста. При заполнении и нажатии кнопки отправки вызывается функция, которая считывает соответствующие данные из файла и выводит результат на экран. Целью всего этого кода является проверка инвентаря.

Таким образом, когда пользователь нажимает на кнопку «инвентаризации» с нажатием кнопки мыши, как указано выше, все работает хорошо, пользователь заполняет участок, выскакивает нужный результат, все довольны. Но что делает его менее удобным, так это тот факт, что в случае, если пользователь хочет провести еще одну проверку инвентаря , необходимо обновить всю страницу. Если это не так, то при нажатии на кнопку «инвентаризации» пользователь снова получит тот же результат последней проверки, а не поле ввода текста.

Итак, мой вопрос: как мне сделать так, чтобы после одной проверки инвентаря все это как бы сбрасывалось, чтобы в следующий раз, когда пользователь нажимает кнопку «получить инвентарь», ему было предложено заполнить текст снова введите поле и, следовательно, получите новый результат.

Извините, если я не прояснил себя достаточно. Я очень плохо знаком с AJAX и его прототипом, и это работа моего коллеги, которую я должен закончить ... Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 ноября 2010

Поскольку вы пообещали убрать код из обработчика onclick, выполните:

var inv = $('inventory');

inv.update('Working...');

new Ajax.Request('ajax.php', {
    method:'get',
    parameters:{
        ac:'checkInventory',
        yards:$('yards').value
    },
    onSuccess: function(response)
        {
            inv.update(response.responseText);
        }
});
0 голосов
/ 30 ноября 2010

Ах, я вижу,

Я не думаю, что Ajax.Updater работает так;взгляните на документ: http://www.prototypejs.org/api/ajax/updater

new Ajax.Updater({ success: 'items', failure: 'notice' }, '/items', {
  parameters: { text: $F('text') },
  insertion: Insertion.Bottom
});

var pn = $('yards').value; 
    $('inventory').update('Working...');
    new Ajax.Updater('inventory','/ajax.php
,{ 
     parameters: { ac: 'checkInventory'
                  , productId: /*put productId here*/
                  , yards:/*put yards here too*/
                 }
, method:'get'
, evalScripts: true
, asynchronous: true
, onSuccess:  function(tr){
            //try an alert(tr.repsonseText); just to see what you get back
            $('inventory').update(tr.responseText);
            }
});

Что нужно попробовать:

  • Очистите поле ввода текста перед его повторным заполнением, когда событие onComplete запускается вВаш вызов ajax.updater.

  • Оповещение об ответе, чтобы убедиться, что вы получаете другой ответ от сервера.

    * Используйте Fiddler, чтобы убедиться, что вы передаете другойproductId

  • Изменить onComplete на onSuccess

Надеюсь, это поможет

...