Ajax请求参数,我做错了什么?

时间:2009-06-04 14:16:41

标签: java javascript ajax servlets prototypejs

我正在使用以下方法中的原型来制定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

我有一个servlet试图获取我放在ajax方法中的参数,但是没有在请求对象中找到任何参数。如果我尝试获取属性,我将其设置为null。

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请求,还是我在获取参数时出错了?

修改

我已经更改了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());


            }

除了在循环之前打印出来之外它什么也没做。

我也尝试在params中放置一个更大的数组,但这也不起作用,循环仍然没有迭代。

我在调试模式下运行Java端,并且没有发送任何属性。至少没有java可以看到的。

我也尝试将参数更改为参数:“step = 1& garbage:'hello world'& foo ='bar'”因为the Prototype docs say you can do that没有属性服务器端。我已经将模式更改为获取并将其附加到网址,并且没有属性...

2 个答案:

答案 0 :(得分:2)

使用getParameterNames()而不是getAttributeNames()。

阅读:http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletRequest.html

并查看接口函数描述以了解它们之间的差异。

答案 1 :(得分:0)

在简要检查原型文档后,您的请求看起来有效。

我建议直接检查AJAX请求的内容。使用Firebug或外部HTTP嗅探器(如Charles Proxy)验证POST请求是否包含您的数据。

修改

我完全错过了 - 你肯定是错误地定义了这个对象。如果没有正确分隔它,就不能将现有符号重用为对象属性。

var params = {"stepNumber":stepNumber};

当你不这样做时(让我们假设stepNumber == 4)那么你的params对象看起来像这样

{"4":4}