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

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

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

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

JavaScript

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

Ajax

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

Q&A

1回答

3442閲覧

Ajaxで$.postで404のエラーが発生。

mAsuo_pro

総合スコア0

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

JavaScript

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

Ajax

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

0グッド

1クリップ

投稿2020/09/14 12:35

ドットインストールの「phpでクイズアプリを作ろう」というレッスン中なのですが、お手本通りに機能しなかったので調べてみたところ404エラーが発生していました。

スペルミスの可能性を考え、コードを全てお手本通りにコピペしたのですが同じエラーが発生しました。

jquery.min.js:2 POST http://localhost/_answer.php 404 (Not Found) send @ jquery.min.js:2 ajax @ jquery.min.js:2 S.<computed> @ jquery.min.js:2 (anonymous) @ quiz.js:12 dispatch @ jquery.min.js:2 v.handle @ jquery.min.js:2

jquery.min.jsにエラーが発生していましたが、
jqueryのX系を変えてもエラーは変わりませんでした。

他の対処法がわかりません。

お手本はvagrantを用いて書いていますが、自分はxamppで書いています。

よろしくお願いします。

quiz.js↓

$(function() { 'use strict'; $('.answer').on('click', function() { var $selected = $(this); if ($selected.hasClass('correct') || $selected.hasClass('wrong')) { return; } $selected.addClass('selected'); var answer = $selected.text(); $.post('/_answer.php', { }).done(function(res) { $('.answer').each(function() { if ($(this).text() === res.correct_answer) { $(this).addClass('correct'); } else { $(this).addClass('wrong'); } }); // alert(res.correct_answer); if (answer === res.correct_answer) { // correct! $selected.text(answer + ' ... CORRECT!'); } else { // wrong! $selected.text(answer + ' ... WRONG!'); } $('#btn').removeClass('disabled'); }); }); $('#btn').on('click', function() { if (!$(this).hasClass('disabled')) { location.reload(); } }); });

Quiz.php↓

<?php namespace MyApp; class Quiz { private $_quizSet = []; public function __construct() { $this->_setup(); if (!isset($_SESSION['current_num'])) { $_SESSION['current_num'] = 0; } } public function checkAnswer() { $correctAnswer = $this->_quizSet[$_SESSION['current_num']]['a'][0]; $_SESSION['current_num']++; return $correctAnswer; } public function isFinished() { return count($this->_quizSet) === $_SESSION['current_num']; } public function reset() { $_SESSION['current_num'] = 0; } public function getCurrentQuiz() { return $this->_quizSet[$_SESSION['current_num']]; } private function _setup() { $this->_quizSet[] = [ 'q' => 'What is A?', 'a' => ['A0', 'A1', 'A2', 'A3'] ]; $this->_quizSet[] = [ 'q' => 'What is B?', 'a' => ['B0', 'B1', 'B2', 'B3'] ]; $this->_quizSet[] = [ 'q' => 'What is C?', 'a' => ['C0', 'C1', 'C2', 'C3'] ]; } }

index.php↓

<?php require_once(__DIR__ . '/config.php'); require_once(__DIR__ . '/Quiz.php'); $quiz = new MyApp\Quiz(); if (!$quiz->isFinished()) { $data = $quiz->getCurrentQuiz(); shuffle($data['a']); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Quiz</title> <link rel="stylesheet" href="styles.css"> </head> <body> <?php if ($quiz->isFinished()) : ?> <a href="">finished!</a> <?php $quiz->reset(); ?> <?php else : ?> <div id="container"> <h1>Q. <?= h($data['q']); ?></h1> <ul> <?php foreach ($data['a'] as $a) : ?> <li class="answer"><?= h($a); ?></li> <?php endforeach; ?> </ul> <div id="btn" class="disabled">Next Question</div> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="quiz.js"></script> <?php endif; ?> </body> </html>

_answer.php↓

<?php require_once(__DIR__ . '/config.php'); require_once(__DIR__ . '/Quiz.php'); $quiz = new MyApp\Quiz(); $correctAnswer = $quiz->checkAnswer(); header('Content-Type: application/json; charset=UTF-8'); echo json_encode([ 'correct_answer' => $correctAnswer ]);

config.php↓

<?php ini_set('display_errors', 1); session_start(); require_once(__DIR__ . '/functions.php');

functions.php↓

<?php function h($s) { return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); }

styles.css

body { font-size: 16px; font-family: Arial, sans-serif; } #container { width: 500px; margin: 15px auto; } h1, ul > li { border: 1px solid #ddd; border-radius: 5px; } h1 { padding: 10px; height: 50px; font-size: 18px; margin: 0 0 10px; } ul { list-style: none; margin: 0 0 10px; padding: 0; } ul > li { margin-bottom: 7px; padding: 7px 10px; cursor: pointer; } #btn { text-align: center; float: right; width: 100px; padding: 7px; color: #fff; border-radius: 5px; background: #00aaff; box-shadow: 0 4px 0 #0088cc; cursor: pointer; font-size: 14px; } #btn.disabled { opacity: 0.5; } .correct { color: limegreen; font-weight: bold; } .wrong { color: #ddd; } .selected { font-weight: bold; }

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/09/14 12:37

urlをhttp(s)からはじめて絶対urlで書けばどう?
mAsuo_pro

2020/09/14 12:53

お返事ありがとうございます。 絶対urlで書いても同じエラーが発生しました。 試しに絶対パスで書いても同じでした。
takasima20

2020/09/14 12:54

スラッシュが余計なんじゃ?
mAsuo_pro

2020/09/14 12:57

スラッシュをはずしても同じエラーが発生しました。
退会済みユーザー

退会済みユーザー

2020/09/14 13:31

あとはファイルを置いているディレクトリが違うとか
mAsuo_pro

2020/09/15 08:59

全て同じファイル内で開発しています。 絶対パスでも試したのでおそらく大丈夫かと。。。
mAsuo_pro

2020/09/15 11:01

$.ajax({...})の書き方で書き直すとうまく行きました。 原因として$.postの書き方(HTTP POST通信)がうまくいかなかったと思うのですが、具体的な原因がわかりません。 何が考えられますか?今後に活かしたいので教えていただけないでしょうか?
guest

回答1

0

単純に「http://localhost/_answer.php」が存在しないだけでしょう

  • httpdの設定が違う
  • 呼び出すファイル名が違う
  • 実際のファイル名が違う

など初歩的なミスの可能性が高いです

投稿2020/09/15 00:18

yambejp

総合スコア116724

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

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

mAsuo_pro

2020/09/15 09:05

ファイル名のスペルミスや違いがないかはきちんと確認しました。 httpdの設定は確認していませんが、jsファイル内のクリック機能は反応するので、post時になんらかのエラーが出ていると考えています。
yambejp

2020/09/15 09:10

逆にpostであることを条件に404エラーを「わざわざ」返しているのであれば それはpostを拒否しているということですからいずれにしろajaxでpostでの 受け渡しはできません
mAsuo_pro

2020/09/15 10:49

お手本のコードを真似しているにも関わらずエラーが出るのは、環境やバージョンに問題があるからだと思うのですが、別のやり方を試した方がいいと思いますか? オススメの書き方などがあればご教授いただけると幸いです。
mAsuo_pro

2020/09/15 11:01

$.ajax({...})の書き方で書き直すとうまく行きました。 原因として$.postの書き方(HTTP POST通信)がうまくいかなかったと思うのですが、具体的な原因がわかりません。 何が考えられますか?今後に活かしたいので教えていただけないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問