🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

4104閲覧

ajaxからPOST属性でcontrollerに変数を渡して使いたい Laravel

Jojostyle

総合スコア11

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2021/03/12 16:17

編集2021/03/13 03:21

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だったということです。
モデルの記述などは乗せていませんが記述しています

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

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

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

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

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

m.ts10806

2021/03/12 21:27

C は無関係なのでは<質問タグ
m.ts10806

2021/03/12 21:28

>モデルの記述などは乗せていませんが記述しています 文章説明では伝わりませんので、投稿文字数に余裕があるのでしたら提示してください。
Jojostyle

2021/03/13 03:22

タグ間違いました。申し訳ないです。 追記しました。
guest

回答1

0

ベストアンサー

download_coupon_click関数は、引数でstore_id, coupon_idを受け取れていると思いますが、それらの値を下記2行で上書きしてしまっているのが原因ではないでしょうか。下記2行を削除してみるとどうでしょうか。

js

1 var store_id = $(this).data('store-id'); 2 var coupon_id = $(this).data('coupon-id');

$.ajax関数へ渡す引数は、
urlの値はシングルクォートではなくバッククォートで囲む必要があります。シングルクォートだと${store_id}等の部分が展開されないからです。あるいは以下のように+で連結しましょう。

js

1 $.ajax({ 2 'url': '/realshop/' + store_id + '/coupon/' + coupon_id + '/fetch', 3 'type': 'POST', 4 }).done(function(data) {

urlの中にそれらの値が正しく展開されれば、data: $.param({ ... }) で値を渡す必要もありません。urlに含まれるそれらの値(ルートパラメータ)は、addToCastアクションの引数で受け取れるからです。

参考: ルートパラメータ

投稿2021/03/13 00:12

編集2021/03/13 05:14
Lulucom

総合スコア1899

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

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

Jojostyle

2021/03/13 03:15

回答ありがとうございます。 それらを実行してみたのですが、できませんでした
Jojostyle

2021/03/13 03:31 編集

エラーログがこのように変わったのですが message: "Undefined property: App\Http\Controllers\User\RealShopController::$user",…} exception: "ErrorException" file: "C:\Users\jjyoj\finish\app\Http\Controllers\User\RealShopController.php" line: 234 message: "Undefined property: App\Http\Controllers\User\RealShopController::$user" trace: [{file: "C:\Users\jjyoj\finish\app\Http\Controllers\User\RealShopController.php", line: 234,…},…] line: 217
Jojostyle

2021/03/13 03:26

なぜでしょうか
Lulucom

2021/03/13 03:58 編集

今の状況ですとその理由まではわかりません。 エラーメッセージからRealShopController.phpの234行目で発生しているとわかりますが、掲載されたコードでは234行目がどこに当たるのかがわからないからです。おそらく$this->userの辺りかと思いますが、RealShopController.phpの全文を見てみないことには何とも言えない状況です。 $this->userと書かれているところは、リクエストしてきたログインユーザーのインスタンスを使いたいということでしょうか?もしそうなら$this->userではなくてauth()->user()などとするとどうでしょうか。
Jojostyle

2021/03/13 06:34

$this->userからauth()->user()に変えたところ、ボタンが消えるようになりました、、、
Jojostyle

2021/03/13 06:38

coupon.ok.blade.phpはこのように構成しています。 <div class="modal-dialog"> <div class="modal-content" style="background: transparent"> <div class="modal-body" style="text-align: center; background: white; border-top: 4px solid #ffa900"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> <div class="row row-v-10" style="text-align: center"> <div> <img src="/images/check.png" style="width: 80px"> </div> 以下略 </div>
Lulucom

2021/03/13 06:53

> ボタンが消えるようになりました それは期待通りでしょうか、それとも不具合でしょうか。どのような挙動が期待されているのかなどアプリの仕様がよくわかりませんのでお答えしづらい状況になってきました。 もし当初のご質問内容「ajaxからPOST属性でcontrollerに変数を渡して使いたい」が解決されたのでしたら、この質問は閉じていただいて、新たに出てきた問題については、また新たに投稿していただければと思います。
Jojostyle

2021/03/13 06:56

モーダルが出てこない件は別で質問させていただきます。 ありがとうございます。
Lulucom

2021/03/13 06:59

いえいえ、少し進んだようでよかったです^ ^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問