1

我有一个休息网络服务,比如

@Path("/postItem")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Item postItem(@QueryParam("name") String name, @QueryParam("price") String price)
{
  System.out.println(name);
  System.out.println(price);
  return new Item(name , price);
}

我使用prototypejs javascript lib从客户端使用下面的代码片段调用上面的rest web服务。

<script>
  new Ajax.Request('/some_url', {
    method:'post',
    parameters: {name: 'apple', price: 12}
    onSuccess: function(transport) {
    var response = transport.responseText || "no response text";
    alert("Success! \n\n" + response);
    },
    onFailure: function() { alert('Something went wrong...'); }
 });
</script>

问题:我无法正确地将参数传递给服务方法的名称和价格。

我在客户端传递了两个参数,但在服务端只有参数“名称”被映射(也有错误的值)。当我打印名称和价格时,我得到以下信息

 System.out.println(name);  ==> name='apple'&price=12
 System.out.println(price); == null

我如何从prototypejs客户端将参数传递给服务,以便'name'获取值apple,'price'获取值12。

4

3 回答 3

0

在“名称”周围加上引号,即

    parameters: {name: 'apple', price: 12}

    parameters: {'name': 'apple', 'price': 12}

“名称”很可能是在对象中未正确传递的关键字

编辑

更多的东西可以尝试...

  • 确保您使用的是最新的 PrototypeJS 版本 1.7.1

  • 后面加逗号 parameters: {name:'apple',price:12},

  • 使用 Chrome 开发工具或 Firebug 仔细检查浏览器是否正确传递参数 - 如果它们被正确传递,请检查您的后端脚本

于 2013-02-13T18:16:29.177 回答
0

您可能想尝试的一些选项:

将参数作为转换为查询字符串的 JS 对象传递:

ajaxParameters = Object.toQueryString({ qkey: qValue });

其中 qkey 和 qValue 是字符串。在作为对象的 Ajax.Request 的第二个参数中,使用生成的 ajaxParameters 作为参数值。

PrototypeJS Hash 对象在大多数情况下也可以正常工作:

ajaxParameters = $H({ qKey0: qValue0, qKey1: qValue2 [, ...]  });

该方法是否为 POST 应该不是问题。有时 POST 方法也可能有一个带有“GET”变量的 ACTION (url),例如

http://mydomain.net/post.php?id=n&action=z _

于 2013-03-04T19:59:45.467 回答
0

好的,最后它通过修改 url 起作用了。

<script>
   new Ajax.Request('/some_url?name=apple&price=12', {
   method:'post',
   onSuccess: function(transport) {
   var response = transport.responseText || "no response text";
   alert("Success! \n\n" + response);
 },
   onFailure: function() { alert('Something went wrong...'); }
});
</script>
于 2013-02-15T11:26:48.200 回答