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

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

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

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

Q&A

解決済

2回答

216閲覧

ajaxで送信後アプリトップページに戻りたい

kkk11

総合スコア23

JavaScript

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

0グッド

0クリップ

投稿2019/10/29 04:03

前提・実現したいこと

http://localhost:3000/items/add?において、ajaxで投稿完了後http://localhost:3000/itemsに遷移したい。
正規表現であったり、JSの便利な機能で以下のことを解決することはできますか?

発生している問題・エラーメッセージ

// 以下のURLから投稿画面に遷移する
http://localhost:3000/items

// こちらの投稿画面でajax通信をして通信成功後上記のURLに遷移したい
http://localhost:3000/items/add?

現状

ajax通信成功後itemsのindexには遷移できましたが、URLがhttp://localhost:3000/items/となってしまいます。
これによって、引き続き投稿画面に行こうと思ってaddへの遷移ボタンを押すとhttp://localhost:3000/items/items/add?となってMissing Methodエラーが出てしまいます。
恐らく、遷移後のURLがhttp://localhost:3000/items/ではなく、http://localhost:3000/itemsだったら成功すると思います。

該当のソースコード

// ajax処理〜〜 success: function(responce) { var origin = location.origin // origin = "http://localhost:8000" var pathname = location.pathname // pathname = "/items/add?" var indexOfAdd = pathname.indexOf('add') // pathnameにaddが含まれてたらアプリのトップに遷移 if (indexOfAdd >= 0) { var replaceAdd = pathname.replace(/add?/, '') location.assign(origin + replaceAdd) } else{ location.reload() } }

試したこと

  • ソースコードのようにlocationからpathnameを引っ張ってきて正規表現で正しいURLに遷移させるようにした。
var replaceAdd = pathname.replace(/add?/, '') location.assign(origin + replaceAdd)
  • items/app?というURL自体をreplaceして/itemsにしようとしましたが、他のページでも共通のコードを使っているのでそういうわけにもいきませんでした。
  • 本番環境のURLはlocalhostと違いpathnameは/myapp/cake/itemsのようになっています。

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

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

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

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

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

guest

回答2

0

Location.replace() - Web API | MDN

をイベントハンドラ(送信後)に仕込むのはどうでしょう?

投稿2019/10/29 04:07

編集2019/10/29 04:10
AkitoshiManabe

総合スコア5432

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

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

kkk11

2019/10/29 04:17

`location.replace('/items/', '/items')` この方法も考えたんですが結果は変わらなかったです。 仮に上記のやり方であっていたとしてもソースコードは複数箇所で使用されているので( )内をitemsのようにベタ書きができません。
guest

0

ベストアンサー

状況がわかりませんが、指定が相対パスになっているのでは?
公開パスをルートとした絶対パスで指定すればいけませんか?

投稿2019/10/29 04:43

編集2019/10/29 04:44
yambejp

総合スコア114829

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問