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

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

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

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

JavaScript

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

Q&A

解決済

1回答

1790閲覧

【PHP】リロードされない

ryouya

総合スコア14

PHP

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

JavaScript

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

0グッド

1クリップ

投稿2021/05/18 00:16

お世話になっております。
下記件について、知見のある方いらっしゃいましたらご教示お願いいたします。

https://rewish.jp/blog/tech/php_with_jquery_comet
こちらのサイトを参考に、リアルタイムチャットを実装しようとしているのですが、
うまくいきません。

#実装の流れ
コードを記述する前に実装の流れを説明します。
main.jsにてリロード時、checkUpdate関数を発火

message_check.phpに遷移し、メッセージ数が増えていないか確認。
増加していた場合、whileから出てきてreload関数が発火し、画面が更新される。

#問題となっている箇所

whileから出てきてreload関数が発火し、画面が更新される。

reload関数でページの更新が行われないです。

#ソースコード
message.php
メッセージのやり取りを行うページ

message

1<?php 2require_once('../config.php'); 3 4$current_user = get_user($_SESSION['user_id']); 56: //長いので割愛 78 </span> 9 <p><?= $message['text'] ?> 10 <?php if (!empty($message['image'])) : ?> 11 <img src="../message/image/<?= $message['image'] ?>"> 12 <?php endif; ?> 13 </p><img src="../user/image/<?= $current_user['image'] ?>" class="message_user_img"> 141516</script>

main.js

main

1jQuery(function($) { 2 var user_id = $('input[name="destination_user_id"]').val(), //送信先のユーザーID 3 current_user_id = $('input[name="current_user_id"]').val(); //自分のユーザーID 4 5 function checkUpdate() { 6 $.post('message_loop.php?mode=update&user_id=' + user_id + '&current_user_id=' + current_user_id + '', {}, function() { 7 checkUpdate(); 8 }); 9 } 10 checkUpdate(); 11});

message_check.php

<?php require('../db_connect.php'); require('../function.php'); if(isset($_GET['mode'])){ $data = get_messages($_GET['current_user_id'],$_GET['user_id']); $temp = $data; while ($temp === $data) { $temp = get_messages($_GET['current_user_id'],$_GET['user_id']); sleep(1); } reload(); } ?>

#関数の説明

get_user:引数のユーザーIDから、ユーザー情報を取りにいく get_messages:引数のユーザーIDから、ユーザー間でやり取りしているメッセージを取りにいく reload:発火すると、いまいるページの更新が行われる function reload(){ header('Location:'.$_SERVER['HTTP_REFERER']); exit(); }

#確認したこと
デバックを行い、relaodが発火しmessage.phpが更新されるようなログを出力していたのですが、
結果は更新されていません。

function reload(){ header('Location:'.$_SERVER['HTTP_REFERER']);  _debug(`|||||||`.$_SERVER['HTTP_REFERER'].`|||||||`); //独自のデバック関数です。 exit(); }

デバッグ出力結果

|||||||http://localhost/message/message.php?user_id=62||||||| //62はユーザーID

#GitHub

https://github.com/karirin/chat_app

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

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

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

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

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

guest

回答1

0

ベストアンサー

溜まってるメッセージを時系列に表示するphp、
メッセージ投稿をサーバーに送信するjs、
新しいメッセージがサーバーに増えているかどうかを確認するjs、
ときて、
新しいメッセージがあったときにページを読み直すのか、
それとも新しいメッセージのデータだけ受け取ってjsでhtmlレンダリングするのか、
そのどっちを狙ってるのかもわからないし、実装も伴ってない。

function reload()ってphpのコードだから、
webブラウザのjs上ではなく、サーバー上で動いているものなので、
html出力し終わったphpに再読込を期待するのはおかしい。

簡単に実装するなら、表示しているページの再読込がいいけど、
入力途中の未送信メッセージが消されちゃう乱暴さがあるのでおすすめできない。

溜まってるメッセージの差分をjsでajax駆使してサーバーからもらうようにして、
htmlレンダリングして表示に反映するって方が動作はスマートになる。
jQueryのDOM操作機能で十分できる話。

投稿2021/05/18 00:43

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ryouya

2021/05/18 03:51

ご回答、ご確認ありがとうございます。 記載いただいている内容を確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問