3

私は RESTful API の専門家ではありませんがPUT/DELETE、AngularJS アプリで単純な関数を使用し、これまで期待どおりに機能していました。この問題が自分のアプリにあるのか、それともエンドポイントを実行している (php) バックエンドにあるのかを調べようとしています。他の REST サービスは正常に機能しており、サーバーは正常に動作しているようです。

この関数は、次のように割り当てられた PUT または DELETE のみを呼び出しますvar method

     if (food.favourite === true) {
                method = "PUT";
                console.log("method is " + method)

            } else if (food.favourite === false) {
                method = "DELETE";
                console.log("method is " + method)
            }
            $http({
                method: method,
                url: $scope.URL
            }).success(function (data, status, headers, config) {
                console.log(method + " successful")
            }).error(function (data, status, headers, config) {
                    console.log(method + " not successful")
            });

$http GET別のエンドポイントを使用するアプリが 1 つあります。アプリのどこにもこのエンドポイントを指していません$http GET。広範囲に検索しました。

上記の $http を含む関数をトリガーすると、コンソールに次のように表示されます。

 method is PUT 
 GET http://localhost:8888/api/ext/51/ 500 (Internal Server Error)
 PUT not successful 

GET失敗した PUT 要求でエラーが発生するのはなぜですか? これは関数の問題ですか、それともエンドポイントの問題ですか?

この問題を理解するのに助けてくれてありがとう。


更新 1

[ネットワーク] パネルからの情報: 上記の $http 関数を呼び出すと、2 つのリクエスト (1 つは「PUT」、もう 1 つは「GET」) が同時にトリガーされます。「PUT」は 301 コードを返し、「GET」は 500 サーバー エラーを返します (このエンドポイントは「GET」に応答するように設定されておらず、「PUT」と「DELETE」にのみ応答するように設定されているため、これは予想されることです)。 ')。

では、なぜ私のコードは異なるメソッドで 2 つの同時リクエストを生成するのでしょうか?

4

2 に答える 2

0

同様の質問に対する将来の回答を求める人のために: 呼び出されたすべてのアクションに対して GET を返そうとするのは、(一般的な REST の、またはこの実装の? 不明な) 標準的な動作です。これの証拠は、ネットワーク パネルで他のすべての (成功した) $http 関数を確認すると、元の PUT/GET/DELETE などと GET の 2 つのアクションも表示されることです。

この特定のエンドポイントの構成では GET が許可されていないため、これらの特定のリクエストの GET で 500 エラーが表示されます。これは、このエンドポイントの PUT/DELETE アクションには影響しません。500 エラーは、PUT/DELETE アクションが機能しなかった理由とは関係ありません。この特定の問題を解決しようとするという点では、それはニシンです。

PUT/DELETE が機能しない理由は、サーバー側でサービスが壊れていたためです。

于 2013-11-13T11:40:49.620 に答える
0

私はこれに遭遇しました。問題は、の最初の引数でエラーを出力する方法にありましたheader。次の形式にする必要があります。

header('400: Error', true, 400);

またはあなたの場合、もちろん:

header('301: Moved Permanently', true, 301);
header('Location: ' . $url);

これは機能しないことに注意してください。

header('Some Random Text', true, 400); // $http.error shows status of 500
于 2014-01-28T00:17:36.627 に答える