【问题标题】:ajax POST to servlet: null parameterajax POST 到 servlet:空参数
【发布时间】:2011-06-27 13:57:37
【问题描述】:

我正在开发一个 flex 应用程序,我需要使用同步方法调用一些数据。经过一番研究,我从 adobe 中找到了一个使用 ajax 和外部接口的代码。太好了。

the code from adobe

当我使用 GET 方法发送数据时,servlet 读取参数并打印一些信息(以检查)。但是当我使用 POST 方法发送数据时,servlet 收到了请求,但参数消失了。

示例:

SERVLET -- 获取

System.out.println("recieved GET");
Map attrib = request.getParameterMap();
System.out.println("parameters: " + request.getParameterMap().size());
for(Object key: attrib.keySet()){
    System.out.println("key: "+key.toString() +" - "+attrib.get(key));
}

SERVLET -- POST

System.out.println("recieved POST");
Map attrib = request.getParameterMap();
System.out.println("parameters: " + request.getParameterMap().size());
for(Object key: attrib.keySet()){
    System.out.println("key: "+key.toString() +" - "+attrib.get(key));
}

灵活获取方法

var ajax:Ajax = new Ajax(DATABASEURL + "?username=test);
ajax.requestType = AjaxRequestType.GET;
ajax.async = false;
var result:String = ajax.send();

由 servlet 打印:

recieved GET
parameters: 1
key: username - [Ljava.lang.String;@4977e2

FLEX POST 方法

var ajax:Ajax = new Ajax(DATABASEURL);
ajax.requestType = AjaxRequestType.POST;
ajax.async = false;
var result:String = ajax.send("username='test'");

由 servlet 打印:

recieved POST
parameters: 0

怎么了?

如果发送请求,为什么现在没有参数?

如果有人可以帮助我,那就太好了,因为我在谷歌上搜索了很多,以至于谷歌可以阻止我的垃圾邮件。

编辑:欢迎无法打印??所以……

【问题讨论】:

  • 为什么需要同步请求?我怀疑尝试以这种方式使用带有 Flash 应用程序的 JavaScript 只是自找麻烦。
  • 应用程序需要从 servlet 加载一些数据。 httpService 对象完美地完成了它,除了一个细节......结果来自结果事件。因此,使用此 httpService 的此类(数据库)的类(数据)收到一个空对象,当此类(数据库)收到结果时,为时已晚。类(数据)已经得到结果。错误的结果,但无论如何都是结果。以同步方式调用消除了这个问题。函数返回真值。
  • 你在说什么?!在前端没有一些严重影响的情况下,不可能进行同步请求。 没有任何理由需要对任何后端服务进行同步调用。我认为你需要做的是为你正在尝试做的事情创建一个更好的架构(我仍然不明白),而不是使用一个很可能会在以后破坏其他东西的大规模黑客攻击......跨度>
  • @jax,我明白了......但是,如果某些类将使用的数据在调用的 null 结果之后独立加载,我该如何加载配置?应用程序使用的所有数据都来自 servlet。我该如何做“当您的孩子没有收到答案时不要使用此结果”?这就是我使用同步方式的原因。一个调用等于一个结果,而不是一个空对象和一个真实的结果......有没有一种简单的方法来做这样的事情?

标签: ajax apache-flex servlets post


【解决方案1】:

没关系,我找到了问题所在。 这是来自adobe page 的javascript 代码。

我已经添加了

xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", params.length);
xmlHttp.setRequestHeader("Connection", "close");

之前

xmlHttp.send(params);

现在,我从 servlet 得到了一个很好的答案...

recieved POST
parameters: 1
key: username - [Ljava.lang.String;@1cebc9f

没有将 flex 与 javascript 一起使用该错误,但只是缺少一些 requestReader,这非常酷。

【讨论】:

  • 没有理由在 Flex 中使用 ajax。有什么意义?!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 2013-05-31
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多