1

私は次のようなRESTWebサービスを持っています

@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を使用して、以下のコードスニペットを使用してクライアント側から上記の残りの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>

問題:サービスメソッドの名前と価格にパラメーターを正しく渡すことができません。

クライアントで2つのパラメーターを渡していますが、サービス側ではパラメーター'name'のみがマップされています(これも間違った値です)。名前と価格を印刷すると、次のようになります

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

'name'が値appleを取得し、'price'が値12を取得するように、prototypejsクライアントからサービスにパラメーターを渡すにはどうすればよいですか。

4

3 に答える 3

0

「名前」を引用符で囲みます。

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

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

'name'は、オブジェクトで正しく渡されていないキーワードである可能性があります

編集

もっと試してみてください...

  • 最新のPrototypeJSバージョン1.7.1を使用していることを確認してください

  • 後にコンマを追加します parameters: {name:'apple',price:12},

  • Chrome Dev ToolsまたはFirebugを使用して、ブラウザがパラメータを正しく渡していることを再確認します。パラメータが正しく渡されている場合は、バックエンドスクリプトを確認します。

于 2013-02-13T18:16:29.177 に答える
0

あなたが試してみたいかもしれないいくつかのオプション:

パラメータをクエリ文字列に変換されたJSオブジェクトとして渡します。

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

ここで、qkeyとqValueは文字列です。オブジェクトであるAjax.Requestの2番目の引数で、結果の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 に答える