我正在使用以下方法中的原型来制定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没有属性服务器端。我已经将模式更改为获取并将其附加到网址,并且没有属性...
答案 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}