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

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

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

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

PHP

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

Q&A

解決済

1回答

1039閲覧

Vue.js axiosでpostができません。

takanakanakana

総合スコア15

Vue.js

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

PHP

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

0グッド

0クリップ

投稿2018/02/07 08:48

前提・実現したいこと

vue-cliでサイト構築をおこなっています。
Vue.jsでaxiosを使いphpMailerにPostしたいと考えています。

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

https://github.com/axios/axiosを参考にしているのですが、
Typeerrorが発生してしまいます。

can't not read propety 'post' of undefine at submitform

該当のソースコード

<template> <div> <h2 class="text-center">Contact Form</h2> <form id="contact_form" v-on:submit.prevent="submitForm" action=""> <div class="form-group"> <label for="name">Name:</label> <input v-model="name" v-on:blur="isValidName" class="form-control" type="text" /> </div> <div class="form-group"> <label for="email">Email</label> <input v-model="email" v-on:blur="isValidEmail" class="form-control" name="email" type="email" /> </div> <div class="form-group"> <label for="message">Message</label> <textarea v-model="message" v-on:blur="isValidMessage" class="form-control" name="message"></textarea> </div> <button type="submit" class="btn btn-primary">Send</button> </form> </div> </template> <script> export default { data() { return{ name: '', email:'', message:'', } }, methods: { isValidName: function () { var valid = this.name.length > 0; console.log('checking for a valid name: ' + valid); return valid; }, isValidEmail: function () { var valid = this.email.indexOf('@') > 0; console.log('checking for a valid email: ' + valid); return valid; }, isValidMessage: function () { var valid = (this.message.length > 0) && (this.message.length < this.maxLength); console.log('checking for a valid message: ' + valid); return valid; }, checkMessage: function () { }, submitForm: function () { console.log('submitting message...'); this.axios.post('/contact/contact.php', { name: this.name, email: this.email, message: this.message }).then(function (response) { console.log(response); alert('成功'); }).catch(function (error) { console.log(error); alert('失敗'); }); } } } </script>
// main.js import axios from 'axios' Vue.prototype.$http = axios;

試したこと

再インストールやドキュメントのコードコピペでも同じエラーが発生します。
phpにデータを受け渡せるようにしたいのですが、どのようにすれば可能になるでしょうか。
ご教授お願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

よっ

takanakanakanaが書きましたコードをチェックして、こちらも「cannot read property 'post' of undefined」が出ていました。

間違えているところ :

  • main.jsに :

Vue.prototype.$http = axios; ではなくて
Vue.$http = axios;にしてください

  • templateファイルに :

とこかでmain.jsがimportされてなかったら、importしてください
直接同じファイルにこう書けますう :

import Vue from 'vue' import axios from 'axios' Vue.$http = axios;

そのあと、送信する時に、this.axiosを行なっていますが、ここはミスです。
正解な書き方は :

axios.post()

Vueの$httpにaxiosを設定していますので、

Vue.$http.post()

でもいいです。

:)

投稿2018/02/07 09:13

編集2018/02/07 09:16
jerome.dupuis

総合スコア172

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

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

takanakanakana

2018/02/07 09:36

解決しました!とても分かりやすく解説していただき本当にありがとうございます!感謝してもしきれません!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問