0

AngularJS フロントエンドと Laravel バックエンド (API としてセットアップ) を使用して Recipe アプリケーションを作成しています。レシピの詳細ビューを見ているときに、ユーザーがレシピを削除できるようにしてほしい。したがって、このボタンを追加しました。

<button class="btn btn-danger" ng-show="recipeData.id" ng-click="deleteRecipe(recipeData.id)">
  Delete
</button>

..この関数を呼び出す:

$scope.deleteRecipe = function(id) {
    Recipes.destroy(id)
      .success(function() {
        $location.path('/');
      })
  }

..このサービス/ファクトリを使用する:

destroy : function(id) {
      return $http.delete('/api/recipes/' + id);
    }

..これらのルールに従ってルーティングする必要がありますLaravelルーティングルール:

Route::group(array('prefix' => 'api'), function() {
  Route::resource('recipes', 'RecipeController');
  Route::resource('ingredients', 'IngredientController');
  Route::resource('nutrients', 'NutrientController');
  Route::resource('IngredientsByRecipe', 'IngredientsByRecipeController');
});

..そして、RecipeController には、仕上げ作業を処理する次の関数があります。

  public function destroy($id)
  {
    Recipe::destroy($id);
    return Response::json(array('success' => true));
  }

..しかし、ブラウザのコンソールに次のエラーメッセージが表示されるため、これを機能させることができません。

DELETE http://localhost:8000/api/recipes/4 405 (Method Not Allowed)

..しかし、ターミナル経由でこのコマンドを実行すると、エラーは表示されず、特定のレシピは問題なく削除されます。

curl -v -X DELETE http://localhost:8000/api/recipes/4

この問題は、CodeKits browser-auto-refresh-tool を実行しているときにのみ発生します。理由がわかりません。以下の 2 つのヘッダーを投稿して、何かおかしな点があるかどうかを確認してください。CodeKit を使用する場合:

DELETE /api/recipes/8 HTTP/1.1
Host: marcuss-macbook-air.local:5757
Connection: keep-alive
Accept: application/json, text/plain, */*
Origin: http://marcuss-macbook-air.local:5757
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
Referer: http://marcuss-macbook-air.local:5757/edit/8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,sv;q=0.6
Cookie: __ngDebug=true; ckrp_ypos=0_0; laravel_session=eyJpdiI6IjFiVWRNSkZhK3hualwvS1FCd29SMk1vaVhJN0Q4Q1RJS1k2TDFnUHBQTWFzPSIsInZhbHVlIjoiOUtRUUFRbUJlaDcyZHJIZE1oQnphUm1wTlZiYmZoQ1VKZXdTWngwM1hLV2s3VjlrSzZ1b3E2Q0dsK1wvRk1mZlNHaG1wcWxBcjc5V2QzOVpSOXpHRElRPT0iLCJtYWMiOiJkNjliMDZjMThjYmVjZDZhZjU2N2ZmMzkwYTUzMjBmYmVlZDc4ZWVlZmFlOWY1YzE5NWYwZDIxNDkwNGU5YmRiIn0%3D

CodeKit を使用しない場合:

DELETE /api/recipes/7 HTTP/1.1
Host: localhost:8000
Connection: keep-alive
Accept: application/json, text/plain, */*
Origin: http://localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
Referer: http://localhost:8000/edit/7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,sv;q=0.6
Cookie: __ngDebug=true; laravel_session=eyJpdiI6Ik5iVWpESEYyRk45Yys5REV1OUdOcHlyTXd6YkNsSFlETTFlUkVhNjdseE09IiwidmFsdWUiOiJVRlFka1hERTBmMGJQb3dBQ2YyQmIzZnNGb2hab1VldmFhUUhHeE00czdqUytmVUdXQXRDbXJPc0lTRUpGZDY2K0V3alNHejRIY0JsdkNxQ1ExdlJoZz09IiwibWFjIjoiNzQ2YzIyODRkZjQ0ZTdjODI0YzYxMTVjMzc0ZTJhM2UzZmQyM2Y4OGIwYmJkMzU2ZWNiNzU1NzgzYzBkZDY0ZSJ9

DELETE リクエストが Angular 経由で (CodeKit を使用して) 405 になる原因は何ですか?

前もって感謝します!

4

1 に答える 1

1

CodeKit は DELETE メソッドをサポートしていません。これが、他のクライアントと連携する理由です。

GitHub には未解決の問題があります: #398

于 2014-10-31T18:46:05.000 に答える