Параметры запроса Ajax, что я делаю не так? - PullRequest
1 голос
/ 04 июня 2009

Я формулирую Ajax-запрос, используя прототип в следующем методе:

function updateServerStep(stepNumber){
    alert("updating server step to " + stepNumber);
    var params = {stepNumber:stepNumber};
    alert(params.stepNumber);
    var request = new Ajax.Request('UpdateStep', {
          method:'Post',
          parameters:params,
          onSuccess: function(transport){
            alert("Step changed to " + stepNumber);
          },
          onFailure: function(transport){
            alert("Failed!");
          }
    });
}//updateServerStep

И у меня есть сервлет, который пытается получить параметр, который я добавил в метод ajax, но не находит никаких параметров в объекте запроса. И если я попытаюсь получить атрибут, который я установил, он будет указан как нулевой.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   HttpSession session = request.getSession(true);
   Integer pageNumber = (Integer)request.getAttribute("stepNumber");

   if (pageNumber != null){
        System.out.println("page number was "+ pageNumber.intValue());
        session.setAttribute("secPayStepNum", pageNumber);
    } else {
        System.out.println("page number was null");
        session.setAttribute("secPayStepNum", new Integer(0));
    }   
}

Правильно ли я создаю запрос Ajax или я ошибаюсь при получении параметров?

EDIT

Я изменил JavaScript, чтобы убрать путаницу в названии следующим образом:

function updateServerStep(stepNumber){
    alert("updating server step to " + stepNumber);
    var params = {step:stepNumber};
    alert(params["step"]);
    var request = new Ajax.Request('UpdateStep', {
          method:'Post',
          parameters: {'step':"1"},
          onSuccess: function(transport){
            alert("Step changed to " + stepNumber);
          },
          onFailure: function(transport){
            alert("Failed!");
          }
    });
}//updateServerStep

Сторона Java все еще не получает никаких параметров, я добавил цикл, который выводит все параметры из request.getAttributeNames (); следующим образом:

Enumeration names = request.getAttributeNames();

            System.out.println("Enumerating Attributes:");
            while( names.hasMoreElements()){
                System.out.println("[ELEMENT] "+ names.nextElement().toString());


            }

и он ничего не делает, кроме вывода строки перед циклом.

Я также попытался поместить больший массив в параметры, и это тоже не работает, цикл все еще не повторяется.

Я запустил конец Java в режиме отладки, и атрибуты не отправляются. По крайней мере, не так далеко, как Ява.

Я также попытался изменить параметры на параметры: "step = 1 & garbage: 'hello world' & foo = 'bar'", потому что документы по прототипам говорят, что вы можете сделать это без атрибутов на стороне сервера. Я изменил режим, чтобы получить и добавил его к URL, и нет никаких атрибутов ...

Ответы [ 2 ]

2 голосов
/ 04 июня 2009

Используйте getParameterNames (), а не getAttributeNames ().

Чтение: http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletRequest.html

и посмотрите описания функций интерфейса для определения различий между ними.

0 голосов
/ 04 июня 2009

После краткой проверки документации по прототипу ваш запрос выглядит действительным.

Я рекомендую проверить содержимое запроса AJAX напрямую. Используйте Firebug или внешний HTTP-сниффер, например Charles Proxy , чтобы убедиться, что запрос POST содержит ваши данные.

EDIT

Я полностью пропустил это - вы определенно определяете объект неправильно. Вы не можете повторно использовать существующий символ как свойство объекта, не разграничив его должным образом.

var params = {"stepNumber":stepNumber};

Если вы этого не сделаете (допустим, stepNumber == 4), тогда ваш объект params будет выглядеть так

{"4":4}
...