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

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

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

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

Ajax

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

Q&A

解決済

1回答

2865閲覧

クラス化されたphpの呼び出しをajaxでも行う方法

candymat

総合スコア16

PHP

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

Ajax

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

0グッド

0クリップ

投稿2020/04/14 02:01

1つ目のphpはindex.phpで2つ目はtest.phpです。
index.pgpでtest.phpをインスタンス化して計算結果(足し算)をPタグで表示しています。
そしてボタンが押されたら同じ計算式を利用したいのですが、その方法が分からず
この様なphpを作成しています。
基本的には
index.phpを起動した時とボタンを押した時に同じ外部phpの関数を利用したいのです。
pタグの部分をボタンを押すごとに表示したいのですがクラス化されたphpをajaxで呼び出す方法はあるのでしょうか?

php

<?php require_once 'test.php'; $MyKeisan = new \Mytest\hyouji(); //実行時に初期値で計算して答えを<p></p>にで戻す $m = $MyKeisan->keisan(1,2); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>テスト</title> </head> <body> <h1 id="saikeisan">テスト計算</h1> <form action=""> 値1:<input type="text" name="a" value="1"> 値2:<input type="text" name="b" value="2"> <input type="button" value="再計算" id="sai"> </form> <!-- 計算結果を<p></p>にて表示↓ --> <?php echo $m; ?> <!-- 計算結果を<p></p>にて表示↑ --> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script type="text/javascript"> //ボタンが押されとき $('#sai').on('click',function(){ alert('ok'); $.ajax({ type: "POST", url:'test.php', data: {"action" :"saikeisan"} }) .done(function(data){ alert(data); }) .fail(function(data){ alert('失敗'); }); }); </script> </body> </html> ``` ```php <?php

namespace Mytest;

if (isset($_POST['action'])){
return $this->keisan($_POST['a'],$_POST['b']);
}

class hyouji {

public function keisan($x,$y){
$z = $x + $y;
$result = '<p >答えは:'.$z.'です。</p>';
return $result;

}

}

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

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

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

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

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

guest

回答1

0

ベストアンサー

JavaScriptが取得できるのは、あくまでもPHPが出力する文字列であってPHPの内部構造に触ったりクラスを操作したりすることはできません。

単純化した流れとしては以下のような感じでAPIを作ることになります。

  1. test_api.phpみたいなAPIを提供するPHPファイルを用意する
  2. test_api.phpではtest.phpを読み込み、計算結果を文字列として出力するように記述する(JSONで出力するのが楽ですが、HTMLそのものでも可能)
  3. JavaSpcriptからはtest_api.phpにアクセスし、jsonで結果を取得。取得した結果をパースして利用する

これをindex.phpだけで賄おうとした場合は、
3のアクセスの内容を判断して初回アクセス時に出力する文字列(HTML)とAjaxからのアクセスの場合に出力する文字列(JSON)を切り替えるような仕組みを実装する必要があります。
*特にこだわりが無ければ、別のファイルにしてしまった方が楽で保守性も上がります。


まずは
2をただのテキストファイルにして、固定値でAjaxからアクセスしてHTMLを書き換える
という事を実装してみることをお勧めします。
それが出来れば、そのテキストファイルと同じ出力をするようにindex.phpなりtest_api.phpなりを実装すればOKです。

投稿2020/04/14 02:37

tanat

総合スコア18713

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

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

candymat

2020/04/14 03:10

ありがとうございます! ご指摘に沿って考えてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問