0

最初の ng-resource の例を機能させようとしています。問題は、JSON ではなくクエリ パラメータとしてデータを送信していることです。

REST リソース用にこのサービスがあります。REST_URL_PREFIX は単なる定数です。

angular.module('myApp')
  .service('Test', ['$resource', 'REST_URL_PREFIX', function Test($resource, URL_PREFIX) {
     return $resource(URL_PREFIX + 'test/:id');
  }]);

このように慣れてください。

var obj = {name: 'Test', num: 12345};
var objRest = new Test();
objRest.$save(obj);

コンソールで、これが次のように Web サービスを呼び出していることがわかります。

POST http://server/rest/test?name=Test&num=12345 

私が望むのは、次のように呼び出すことです。

POST http://server/rest/test  

ただし、リクエストの本文に JSON が含まれています。

{name: 'Test', num: 12345}

リクエストのコンテンツ タイプは自動的に application/json になるので、JSON を送信すると思いますか?

私は何かを逃しましたか?検索にかなりの時間を費やしましたが、同様の質問がいくつかありますが、問題を解決するものはありませんでした。

編集
最終的には、これでフォームから詳細を送信したいと考えています。

$scope.submit = function(test) {
  > Code to save test parameter using Test resource required here
}

ありがとう

4

2 に答える 2

2

元のポスターには次のコードがありました。

var obj = {name: 'Test', num: 12345};
var objRest = new Test();
objRest.$save(obj);

ただし、受け入れられた回答からすぐには明らかではないため、これを解決するための私の投稿です。$save 関数が $resource サービスで直接使用されているということですか。このコードのコンテキストでは、new Test()RESTful 呼び出しを行うために使用される angular リソース クラスのインスタンスが作成されます。

使用すべき機能は、saveではなく機能$saveです。

次のコードは、@Ben Thurley が代わりに使用する必要があるものです。

var obj = {name: 'Test', num: 12345};
var objRest = new Test();
objRest.save(obj);

違いは非常に微妙ですが、POST 呼び出しが http リクエスト本文の JSON ではなくクエリ パラメータで行われることを意味します。

メソッドがリソース オブジェクトに存在する唯一の理由は$save、get/query リクエスト中に返されるオブジェクトにメソッドをアタッチできるためだと思います。ドキュメント$saveでは、リクエストから返されたオブジェクトの 1 つで使用されているというコンテキストでのみ言及しています。

たとえば、次のようになります。

var myRESTResourceEndPoint = $resource('/foo/:bar', {bar: null});
var foo = myRESTResourceEndPoint.get({bar: 123});

次に$save、このコンテキストで有効です。

foo.$save();

assaveはこのコンテキストで有効です:

myRESTResourceEndPoint.save();

次のコードは結果を生成しますが、意図した方法ではないため、混乱が発生します。

foo.$save(foo);

また

myRESTResourceEndPoint.$save(foo);
于 2016-04-15T12:37:24.843 に答える
0
$scope.createTest = function () {
   var newTest = new Test;
   newTest.name = "new name";
   newTest.nume="123";

    newTest.$save();

};
于 2014-07-03T11:27:20.240 に答える