laravelでajaxを使って簡単な非同期通信をしたい者です。
非同期通信自体はおそらく出来ているのですが(.done(function(data)に飛ぶため)、
変数contentを覗くと以下のようなエラーが出ています。
message : "content is not defined" stack : "ReferenceError: content is not defined↵ at eval (eval at <anonymous> (http://localhost:8000/another/:25:8), <anonymous>:1:1)↵ at HTMLInputElement.<anonymous> (http://localhost:8000/another/:51:8)↵ at HTMLInputElement.dispatch (http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js:2:38007)↵ at HTMLInputElement.h (http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js:2:33868)" __proto__ : Error
ReferenceErrorで検索すると「jquery」が読み込めていないからなど様々な原因が記載されていました。自分も色々と試してはみたものも解決には至っていません。
以下が自分の書いたコードになります。
resources/views/name/index.blade.php
<head> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"> </script> <meta name="csrf-token" content="{{ csrf_token() }}"> </head> <body> <div class="content"> <h1>名前入力</h1> <br> <form action="/name" method="post" class="enter_form"> {{ csrf_field() }} <input type="text" name="name" value="{{old('name')}}" id="enter_textarea"> <input type="submit" id="btn" class="btn btn-primary" value="生成"> </form> <div id="names"> @if(isset($name)) <p>{{ $name }}</p> @endif <p></p> </div> </div> <script> $('#btn').click(function(e) { e.preventDefault(); $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); //POSTメソッドで送るデータを定義する //var data = {パラメータ : 値}; var data = {'content': $("#enter_textarea").val()}; $.ajax({ type: 'post', data: data, datatype: 'json', url: '/name' }) .done(function(data){ //ajaxの通信に成功した場合 var data = data.content; var content = "<p>%hoge</p>".replace("%hoge", data); var html = $('#names').append(content); $('#names').append(html); $("#enter_textarea").val(''); }) .fail(function(data){ //ajaxの通信に失敗した場合 alert("error!"); }); }); </script> </body>
web.php
Route::get('/name', 'NameController@index'); Route::post('/name', 'NameController@post');
App/Http/Controllers/NameController
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Name; class NameController extends Controller { public function index(){ return view('another_name.index'); } public function post(Request $req){ $name = new Name; $form = $req->all(); unset($form['_token']); $name->fill($form)->save(); $names = \DB::table('names')->orderBy('id', 'desc')->get(); $name = $another_names->first()->name; return view('name.index' , ['name' => $name]); } }
コメントよろしくおねがいします。
回答1件
あなたの回答
tips
プレビュー