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

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

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

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1134閲覧

Ajax: jsに移すと配列がおじゃんになるのを阻止したいです

RyojiAraki

総合スコア79

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/11/14 20:33

編集2021/11/14 21:11

開発環境

デバイス->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>

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

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

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

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

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

guest

回答2

0

ベストアンサー

js

1 datatype : "json",

dataType です。

投稿2021/11/14 23:50

int32_t

総合スコア20845

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

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

RyojiAraki

2021/11/15 07:11

その通りでしたm(_ _)m 回答ありがとうございました! 他の方の回答が気になるのでベストアンサーつけるのは少しだけ待ってください!
guest

0

非同期処理はそろそろfetchに切り替えた方がよいかもしれません

javascript

1const atkId = '322'; 2const difId = '350'; 3const url='http://localhost:8888/demo.php'; 4const method='post'; 5const body=Object.entries({'func':'get_context',atkId,difId}).reduce((x,y)=>(x.append(y[0],y[1]),x),new FormData); 6fetch(url,{method,body}).then(res=>res.json()).then(console.log);

投稿2021/11/15 00:53

yambejp

総合スコア114779

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問