質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

7329閲覧

[JS]axios.deleteにて「405 Method Not Allowed」というエラーが表示される

sabx

総合スコア200

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/01/18 00:55

編集2019/01/18 02:18

聞きたいこと

Laravel, Vue, axiosを使用してWebアプリを作成しているのですが、掲題のエラーが表示されてしまいます。

  • エラーメッセージ
VM129109:1 DELETE http://localhost/api/hub/session?sessionName=aiueo 405 (Method Not Allowed)
  • api.php
Route::delete('/hub/session/{sessionName}', 'Hub\SessionsController@destroy');
  • web.php
Route::get('/{any}', function () { return view('app'); })->where('any', '.*');
  • コントローラー
?php namespace App\Http\Controllers\Hub; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class SessionsController extends Controller { /** * @param $sessionName * @return string * */ public function destroy($sessionName) { return "DELETE"; } }
  • JavaScript
<template> <b-card :header="caption"> <b-table :hover="hover" :striped="striped" :bordered="bordered" :small="small" :fixed="fixed" :items="items" :fields="fields" :current-page="currentPage" :per-page="perPage" responsive="sm" > <template slot="切断" slot-scope="data" > <button v-on:click="deleteSession('aiueo');"> {{ data.value }} </button> </template> </b-table> <nav> <b-pagination v-model="currentPage" :total-rows="getRowCount(items)" :per-page="perPage" prev-text="Prev" next-text="Next" hide-goto-end-buttons /> </nav> </b-card> </template> <script> import axios from 'axios' /** * Randomize array element order in-place. * Using Durstenfeld shuffle algorithm. */ const shuffleArray = (array) => { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)) const temp = array[i] array[i] = array[j] array[j] = temp } return array } export default { name : 'CTable', props: { caption: { type : String, default: 'Table', }, hover: { type : Boolean, default: false, }, striped: { type : Boolean, default: false, }, bordered: { type : Boolean, default: false, }, small: { type : Boolean, default: false, }, fixed: { type : Boolean, default: false, }, fields: { type : Array, default: false }, sessions: { type : Array, default: false } }, data: () => { return { currentPage: 1, perPage : 20, totalRows : 0, } }, computed: { items() { return shuffleArray( this.sessions ) } }, methods: { getRowCount (items) { return items.length }, deleteSession ($sessionName) { axios .delete('http://localhost/api/hub/session', {params: {'sessionName': 'aiueo'}}) .then(response => (console.log(response))) } }, } </script>

追記

  • JavaScript
<template> <b-card :header="caption"> <b-table :hover="hover" :striped="striped" :bordered="bordered" :small="small" :fixed="fixed" :items="items" :fields="fields" :current-page="currentPage" :per-page="perPage" responsive="sm" > <template slot="切断" slot-scope="data" > <button v-on:click="deleteSession('aiueo');"> {{ data.value }} </button> <form method="POST" @submit.prevent="deleteSession('aiueo')"> <input name="_method" type="hidden" value="DELETE"> <button type="button" @click="deleteSession">切断する</button> </form> </template> </b-table> <nav> <b-pagination v-model="currentPage" :total-rows="getRowCount(items)" :per-page="perPage" prev-text="Prev" next-text="Next" hide-goto-end-buttons /> </nav> </b-card> </template> <script> import axios from 'axios' /** * Randomize array element order in-place. * Using Durstenfeld shuffle algorithm. */ const shuffleArray = (array) => { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)) const temp = array[i] array[i] = array[j] array[j] = temp } return array } export default { name : 'CTable', props: { caption: { type : String, default: 'Table', }, hover: { type : Boolean, default: false, }, striped: { type : Boolean, default: false, }, bordered: { type : Boolean, default: false, }, small: { type : Boolean, default: false, }, fixed: { type : Boolean, default: false, }, fields: { type : Array, default: false }, sessions: { type : Array, default: false } }, data: () => { return { currentPage: 1, perPage : 20, totalRows : 0, } }, computed: { items() { return shuffleArray( this.sessions ) } }, methods: { getRowCount (items) { return items.length }, deleteSession ($sessionName) { const params = new URLSearchParams() params.append('sessionName', $sessionName) axios .delete('http://localhost/api/hub/session', { data: params }, { headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, }) .then(response => (console.log(response))) } }, } </script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

クエリパラメーターで引き渡していたsessionNameをエンドポイントにしたらうまくいきました!
回答していただき、ありがとうございました!
(誤) http://localhost/api/hub/session?sessionName=aiueo
(正) http://localhost/api/hub/session/aiueo

投稿2019/01/19 02:44

sabx

総合スコア200

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

axios.delete('http://localhost/api/...',{ data: params, headers: { ... } })

のように第2引数にdataとheadersを記述すればいけた気がします

投稿2019/01/18 07:23

編集2019/01/18 07:25
nishi2424

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「もしかしたらこれかなあ」くらいの参考記事提示でしかありませんが、ヒントになればと。

$deleteの際は引数で「data(データ)オブジェクト」を定義する必要があるようです。

もしかしたらそれだけではそもそもDELETEリクエストが送れないかもしれないので、上記だけで解決しなければ_method=DELETEをパラメータに含めてみてください。

投稿2019/01/18 01:33

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sabx

2019/01/18 02:16

ご回答ありがとうございます! 両方とも試してみましたが、解決せず・・・ アドバイスしていただいたとおりに実装した自身も少しないので、質問本文に新しいコードを追記しています・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問