初歩的な質問で申し訳ありません。
掲題の通り、Ajaxを使用してJavaScriptの値(配列)をPHPに送り、表示したいのですが
PHPで表示しようとするとNULLとなっており、困っております。
■やりたいこと
チェックボックスで選択したものの値をJavaScriptからPHPに受け渡したいと考えております。
■確認したこと
JavaScript側でログを見たところ、配列に値は入っているため
PHPの受け取りがうまくできていないことがNULLの原因だと思っています。
※PHPでfor文を作成して値を取得するなどいろいろ試してみましたが、取得できず…現在の状態となっております。
JavaScriptで型をObjectに変えている処理ですが
色々なサイトを閲覧したところ、Ajaxで配列データを送る場合はObject型が良いと書かれていたため
このような書き方にしております。
すべてネットで調べた情報をもとにコードを記載しているため
基礎ができていない部分等あるかと思いますが、解決のヒントをいただけると嬉しいです。
※また、カスタムデータ(data-product)の取得方法がおかしなことになっていると思いますが、
いい方法が思いつかず、現在このような処理にしております…。
効率的な取得方法がありましたら、教えていただけると幸いです…。
よろしくお願いします。
HTML
<tr class="listTrDescription"> <td class="listTitleTdCheckbox"> <label><input type="checkbox" name="price" data-product="テスト1" value="1000" id="1"/></label> </td> </tr> <tr class="listTrDescription"> <td class="listTitleTdCheckbox"> <label><input type="checkbox" name="price" data-product="テスト2" value="1000" id="2"/></label> </td> </tr>
JavaScript
<script type="text/javascript"> $("#checkout").submit(function () { var sendProduct = []; //data-productを入れる var sendPrice = 0; //nameを入れる var flag = false; var additionProduct = 0; var max = document.product.price.length; //チェックボックスの数取得 var checkPrice = document.product.price; //チェックした値を取得 for(var i = 0; i < max; i++ ){ if(checkPrice[i].checked ){ flag = true; onePrice = document.product.price[i].value; //nameの値を取得 sendPrice = parseInt(sendPrice) + parseInt(onePrice); additionProduct = i; var answerProduct = additionProduct + 1 if(answerProduct == 1){ sendProduct[i] = document.getElementById("1").getAttribute("data-product"); }else if(answerProduct == 2){ sendProduct[i] = document.getElementById("2").getAttribute("data-product"); } } } var productObj = {};//array型の配列をObject型に変換 for(var i = 0; i < sendProduct.length; i++){ productObj[i] = sendProduct[i]; } var data = { 'price':sendPrice, 'product':productObj, }; var request = $.ajax({ type: "POST", url: "http://test.php", data:data, }); request.done(function(msg) { alert( "success" + msg ); }); request.fail(function(jqXHR, textStatus) { alert("エラーが発生しました。問い合わせから報告してください。"); alert( "Request failed: " + textStatus + jqXHR); }); }); </script>
alert( "success" + msg )で表示される文言
successstring(4)"2000" string(10)"テスト1" string(10)"テスト2"
PHP
<?php header('Access-Control-Allow-Origin:*'); header('Access-Control-Allow-Credentials: true'); if (version_compare(PHP_VERSION, '5.1.0', '>=')) {//PHP5.1.0以上の場合のみタイムゾーンを定義 date_default_timezone_set('Asia/Tokyo');//タイムゾーンの設定(日本以外の場合には適宜設定ください) } $sendProduct = array(); $sendPrice = $_POST['price']; $sendProduct = $_POST['product']; var_dump($sendPrice);//表示できている var_dump($sendProduct[0]);//表示できることを確認したい var_dump($sendProduct[1]);//表示できることを確認したい var_dump($sendProduct[2]);//表示できることを確認したい ?>
PHPの表示結果
string(4) "1000" NULL NULL NULL
回答2件
あなたの回答
tips
プレビュー