開発環境
デバイス->macbook air
実行->mamp(象のアイコン)
問題点
このスレッドの続きです。質問案件が別なのと、コードの量が膨大なので、こちらに分けます。
ajaxを利用して、画面遷移なしでphpでDBから得たデータをjsに返すコードを作ってます。
返す際、渡すデータが30以上あるので、phpで一旦配列に入れてからjson処理してます。
そして、jsで解凍、、と言う風にしたかったのですが、jsで受け取った値で例えばresponse[2]とか指定すると、[12,13,14]と言う配列があったとして2を取ってきます。本当に欲しい値は14です。この現象どうすれば解決できるのでしょうか?よろしくお願いします。おそらくですが、jsについた頃には配列ではなく文字列として認識されているかもしれません...
コード
(demo.js)
javascript
1const atkId = '322'; 2const difId = '350'; 3 4$.ajax({ 5 type:'post', 6 url:'http://localhost:8888/demo.php', 7 data:{'func':'get_context',atkId:atkId,'difId':difId}, 8 datatype : "json", 9}) 10.done(function(response) { //正常に処理が完了した時 11 //成功した時に、計算用関数(下にあるやつ)を実行するようにします! 12 element.innerHTML = "<p>"+response[2]+"</p>"; 13 14 15}) 16.fail(function(xhr) { 17 alert("失敗!"); 18 19}) 20.always(function(xhr, msg) { 21 22});
(demo.php)
php
1<?php 2 3function get_context($atk_name,$dif_name){ 4 try { 5 6 /* リクエストから得たスーパーグローバル変数をチェックするなどの処理 */ 7 8 // データベースに接続 9 $pdo = new PDO( 10 'mysql:dbname=----;host=------;charset=utf8mb4', 11 '------', 12 '------', 13 [ 14 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 15 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 16 ] 17 ); 18 19 $stmt =$pdo->prepare('SELECT * FROM yokai_data WHERE id = :id'); 20 $stmt->bindValue(':id', $atk_name); 21 $stmt->execute(); 22 foreach($stmt as $row) 23 { 24 $atkStatus_a_h = (int)$row['status_a_h'];//dif 25 $atkStatus_a_a = (int)$row['status_a_a']; 26 $atkStatus_a_m = (int)$row['status_a_m']; 27 $atkStatus_a_d = (int)$row['status_a_d']; 28 $atkStatus_a_s = (int)$row['status_a_s']; 29 $atkStatus_b_h = (int)$row['status_b_h']; 30 $atkStatus_b_a = (int)$row['status_b_a']; 31 $atkStatus_b_m = (int)$row['status_b_m']; 32 $atkStatus_b_d = (int)$row['status_b_d']; 33 $atkStatus_b_s = (int)$row['status_b_s']; 34 $atkSkill = $row['skill_name'];//dif 35 $weapon_a = $row['weapon_a'];//none 36 $weapon_m = $row['weapon_m'];//none 37 $atkName = $row['yokai_name'];//dif 38 $atkVisu = $row['visu'];//dif 39 $spe_type = $row['spe_type'];//none 40 $spe_damage = (int)$row['spe_damage']; 41 $spe_num = (int)$row['spe_num']; 42 $spe_name = $row['spe_name']; 43 } 44 45 $stmt =$pdo->prepare('SELECT * FROM weapon WHERE weapon_name = :wea');//ここは、weaponaゾーン difは必要ないのだ 46 $stmt->bindValue(':wea', $weapon_a); 47 $stmt->execute(); 48 foreach($stmt as $row) 49 { 50 $weapon_a_dam = (int)$row['damage'];//武器のデータはatkの特権 51 $weapon_a_num = (int)$row['num'];//idじゃなくってさっき手に入れたデータをwhereにしないといけない 52 } 53 $stmt =$pdo->prepare('SELECT * FROM weapon WHERE weapon_name = :wea');//ここはweaponmゾーン 54 $stmt->bindValue(':wea', $weapon_m); 55 $stmt->execute(); 56 foreach($stmt as $row) 57 { 58 $weapon_m_dam = (int)$row['damage']; 59 $weapon_m_attribute = $row['attribute_type']; 60 $weapon_m_heal = (int)$row['heal']; 61 } 62 63 //したからdifゾーンだぞ 64 $stmt =$pdo->prepare('SELECT * FROM yokai_data WHERE id = :id'); 65 $stmt->bindValue(':id', $dif_name); 66 $stmt->execute(); 67 foreach($stmt as $row) 68 { 69 $difStatus_a_h = (int)$row['status_a_h'];//dif 70 $difStatus_a_a = (int)$row['status_a_a']; 71 $difStatus_a_m = (int)$row['status_a_m']; 72 $difStatus_a_d = (int)$row['status_a_d']; 73 $difStatus_a_s = (int)$row['status_a_s']; 74 $difStatus_b_h = (int)$row['status_b_h']; 75 $difStatus_b_a = (int)$row['status_b_a']; 76 $difStatus_b_m = (int)$row['status_b_m']; 77 $difStatus_b_d = (int)$row['status_b_d']; 78 $difStatus_b_s = (int)$row['status_b_s']; 79 $difSkill = $row['skill_name'];//dif 80 $difName = $row['yokai_name'];//dif 81 $difVisu = $row['visu'];//dif 82 } 83 84 $atkArray =array($atkStatus_a_h,$atkStatus_a_a,$atkStatus_a_m,$atkStatus_a_d,$atkStatus_a_s,$atkStatus_b_h,$atkStatus_b_a,$atkStatus_b_m,$atkStatus_b_d,$atkStatus_b_s,$atkSkill,$atkName,$atkVisu,$weapon_a,$weapon_m,$spe_type,$spe_damage,$spe_num,$spe_name); 85 86 $weaponArray =array($weapon_a_dam,$weapon_a_num,$weapon_m_dam,$weapon_m_attribute,$weapon_m_heal); 87 88 $difArray =array($difStatus_a_h,$difStatus_a_a,$difStatus_a_m,$difStatus_a_d,$difStatus_a_s,$difStatus_b_h,$difStatus_b_a,$difStatus_b_m,$difStatus_b_d,$difStatus_b_s,$difSkill,$difVisu,$difName); 89 90 $combinedArray =array_merge($atkArray, $difArray, $weaponArray); 91 92 93 94 $combinedArray_json = json_encode($combinedArray,JSON_UNESCAPED_UNICODE); 95 return $combinedArray_json; 96 97 //print_r($combinedArray_json); 98 99 $pdo =null; 100 101 } catch (PDOException $e) { 102 header('Content-Type: text/plain; charset=UTF-8', true, 500); 103 exit($e->getMessage()); 104 105 } catch (PDOException $e) { 106 header('Content-Type: text/plain; charset=UTF-8', true, 500); 107 exit($e->getMessage()); 108 109 } 110 111} 112 113$func = $_POST['func']; 114$atk_name= $_POST['atkId']; 115$dif_name= $_POST['difId']; 116echo $func($atk_name,$dif_name); 117 118 119?>
html
1<!DOCTYPE html> 2<html lang="jp"> 3<head> 4<title>サンプルページ</title> 5 6<meta charset="utf-8"> 7<meta name="description" content=""> 8<meta name="author" content=""> 9<meta name="keywords" content=""> 10<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 11 12</head> 13<body> 14<!-- ここからHTMLでマークアップする --> 15 16<!-- JQeryを読み込む --> 17<!--<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"></script>--> 18<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 19 20<!-- 自分で作成したJavaScriptを読み込む --> 21<script src="demo.js"></script> 22 23<div id="element"></div> 24<div id="element2"></div> 25</body> 26</html>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/15 07:11