phpのbladeから受けっとた変数をajaxのpost属性で飛ばすurlのパラメーターとして使っています。それに加えてその変数をコントローラに送りたいのですが、おそらくエラーログからその変数はnullになっているみたいです。
ajaxからcontrollerにその変数を送る方法を教えていただきたいです。
realshopcontroller
1namespace App\Http\Controllers\User; 2 3use App\Http\Controllers\Controller; 4use Illuminate\Http\Request; 5use Illuminate\Support\Facades\DB; 6use Illuminate\Support\Facades\Auth; 7use App\Models\User\Store; 8use App\Models\User\Coupon; 9use App\Models\User\Member; 10use App\Models\User\MenuCategory; 11use App\Models\User\StoreMenu; 12use App\Models\User\StoreCategory; 13use App\Models\User\CouponMember; 14use function foo\func; 15use http\Env\Response; 16 17public function addToCast($store_id, $coupon_id) 18 { 19 20 $store = Store::find($store_id); 21 22 23 $coupon = $store 24 ->coupons() 25 ->where('status', COUPON_STATUS_RELEASE) 26 ->where('type', COUPON_TYPE_NORMAL) 27 ->where('coupons.id', $coupon_id) 28 ->first(); 29 30 if (is_null($coupon->used)) 31 $coupon->used = 0; 32 33 if ($coupon 34 && ($coupon->sum === 0 || $coupon->used < $coupon->sum) 35 && !$coupon->hasDownloaded($store->id, $this->user->id)) { 36 37 38 $this->user->add_coupon([ 39 'store_id' => $store->id, 40 'coupon_id' => $coupon_id, 41 ]); 42 43 44 return response()->json([ 45 'code' => 0, 46 'error' => '', 47 'html' => view('coupon_ok', compact('store', 'coupon'))->render() 48 ], 200); 49 } 50 51 52 return response()->json([ 53 'code' => 500, 54 'error' => 'maximum number of coupon collection', 55 'html' => view('coupon_error', compact('store'))->render() 56 ], 200); 57 58 } 59```web.php 60```web.php 61Route::POST('/realshop/{store_id}/coupon/{coupon_id}/fetch', 'User\RealShopController@addToCast')->name('coupons.addtocast');
main.js
const download_coupon_click = function (ele, store_id, coupon_id) { ele.disabled = true; ele.innerText = "Loading..."; event.preventDefault(); var store_id = $(this).data('store-id'); var coupon_id = $(this).data('coupon-id'); $.ajaxSetup({ cache: false }); $.ajax({ 'url': '/realshop/${store_id}/coupon/${coupon_id}/fetch', 'type': 'POST', // 'dataType': 'json', data: $.param({store_id: store_id, coupon_id: coupon_id}) }).done(function(data) { // console.log(data); if (data.code === 401) { location.href = '/login'; } else { $("#ajaxModal").html(data.html); $('#ajaxModal').modal('show'); } }).fail(function (jqXHR, textStatus, errorThrown) { // 通信失敗時の処理 alert('ファイルの取得に失敗しました。'); console.log("ajax通信に失敗しました"); console.log("jqXHR : " + jqXHR.status); // HTTPステータスが取得 console.log("textStatus : " + textStatus); // タイムアウト、パースエラー console.log("errorThrown : " + errorThrown.message); // 例外情報 });
coupon.blade
1 <div class="position-relative d-none d-md-block" > 2 <span style="width:calc(100% + 20px); height:50px; position:absolute; left:-10px; top:-10px; border-top:2px solid #fb9d38; border-right:2px solid #fb9d38;" id="ajaxModal"></span> 3 <button onclick="download_coupon_click(this, {{$store->id}}, {{ $coupon->id }})" class="btn font-weight-bold font-18" style="border-radius: 3px; height:150px; line-height:30px; white-space:initial; min-height:70px; width:100%; background:#fb8d45; display:block;" >このクーポンを<br>使う・予約する</button> 4 <span style="width:calc(100% + 20px); height:50px; position:absolute; left:-10px; bottom:-10px; border-bottom:2px solid #fb9d38; border-left:2px solid #fb9d38;"></span> 5 </div> 6
error内容はcoupons()がnullなので$storeがnullだったということです。
モデルの記述などは乗せていませんが記述しています
回答1件
あなたの回答
tips
プレビュー