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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

2872閲覧

ajaxでショッピングカート内のデータを動的に表示させるには?

neginattofan

総合スコア66

PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/02/06 05:01

練習用にECサイトを作っています。
ショッピングカートページの合計金額、合計個数をカートに入れた商品をセレクトボックスで個数を変更するようにしています。
変更すると、jQueryでイベントが発生して、商品IDと変更後の個数をajaxで送り、送り先でカート内のデータを更新しています。

コードで流れを説明すると、

html

1   <select name="product-num" data-productid="<?php echo $val['id']; ?>"> 2 <?php for($i = 0; $i < 3num"0; $i++) : ?> 3 <option value="<?php echo $i?>" <?php if ($i == $num) echo "selected"; ?> ><?php echo $i?></option> 4 <?php endfor ; ?> 5 </select>

上のような感じのセレクトボックスです。

これを変更すると、以下のコードでajaxNumにデータを送ります。

jQuery

1 var $select = $('.js-select-num'); 2 var selectProductId = $select.data('productid'); 3 $select.on('change', function() { 4 var value = $select.val(); 5 $(this).children('option').removeAttr('selected'); 6 $.ajax({ 7 type: "POST", 8 url: "ajaxNum.php", 9 data: { 10 productId : selectProductId, 11 number : value, 12 }, 13 }).done(function( data ) { 14 console.log('Ajax success'); 15 16 }).fail(function ( msg ) { 17 console.log('Ajax failure'); 18 }); 19 20 });

送り先のajaxNum.phpで合計金額、合計個数を格納している$_SESSION['cart_total]を更新しています。

php

1$p_id = $_POST['productId']; 2$number = $_POST['number']; 3$productInfo = getProductDetail($p_id); 4 5foreach($_SESSION['cart_each'] as $key => &$val) { 6 // 変更した商品の個数とその合計金額を更新 7 if ($val['id'] == $p_id) { 8 $val['number'] = $number; 9 $val['price'] = $number * $productInfo['price']; 10 } 11 } 12 unset($val); 13 $_SESSION['cart_total']['num'] = 0; 14 $_SESSION['cart_total']['price'] = 0; 15 foreach($_SESSION['cart_each'] as $key => $val) { 16 // カート内の合計個数と合計金額を更新 17 $_SESSION['cart_total']['num'] += $val['number']; 18 $_SESSION['cart_total']['price'] += $val['price']; 19 20 }

問題は、データが更新されただけで画面のhtmlが動的に更新されていないのですが、どうすればいいのでしょうか?
データを更新した後にリロードすると、更新後のデータが表示されるので、更新はエラーなくできているのですが。。

不備があればご指摘お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

画面の話であれば勝手に描画され直したりはしませんので、API側から然るべき情報を返し、返り値(doneに入ってくる)をJavaScriptで然るべきところに設定するように書いてください。

API側の「出力」の処理はすべてそのまま返ってきます。
※dataTypeによって返り値の形式も変わります

ただ、現状の仕組みだとせっかくfailにエラーが返ってきてもどこにも出力してないので、そのままでconsole.logに突っ込むくらいはしておくと良いです。

投稿2020/02/06 05:14

m.ts10806

総合スコア80850

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

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

neginattofan

2020/02/06 06:50

ありがとうございます。おかげで方向性が見えました。適切な質問をするよう心がけます。
m.ts10806

2020/02/06 06:51

それはよかったです。 ところで質問の不備について指摘してましたっけ?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問