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

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

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

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

Ajax

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

Q&A

解決済

2回答

7516閲覧

Ajax-PHPでPostでうまくいかない

YasuoHayami

総合スコア6

PHP

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

Ajax

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

0グッド

0クリップ

投稿2018/05/29 06:12

編集2018/05/29 07:10

前提・実現したいこと

AJAXでログイン画面を作っています。サーバ側はPHPです。
データのPOSTがうまくいかず、はまっています
うまくデータが送れていないのか、データを受け取れていないのか
両方なのか切り分けができずにいます

発生している問題・エラーメッセージ

syntax error near unexpected token N in JSON at position

※Nはサーバ側で$_POSTをvar_dumpで出力したところで落ちているからだと思います。

エラーメッセージ

syntax error near unexpected token N in JASON at position

該当のソースコード

JQuery

var param = { "userId": "" + $("#userId").val(), "password":"" + $("#password").val() }; $.ajax({ type: "POST", url: "./php/ctrl/loginCheck.php", async: false, dataType: "JSON", contentType: "application/json", data: {LOGIN_DATA: param} }) .done(function(callbackValue, dataType){  console.log( callbackValue.status + ', ' + callbackValue.reason );  console.log(callbackValue);  if( callbackValue.status != "success" ) {   $("#error").html("ユーザID、またはパスワードが違います。");   return;  } window.location = "./?opt=<?php echo $opt ?>"; }) .fail(function(XMLHttpRequest, textStatus, errorThrown){ // デバッグ用 console.log("ajax通信に失敗しました"); console.log("XMLHttpRequest.status : " + XMLHttpRequest.status); console.log("textStatus : " + textStatus); console.log("errorThrown : " + errorThrown.message); })//Ajax通信Error処理

PHP

<?php session_start(); $ret = array(); if (isset($_POST["LOGIN_DATA"])) { $d = $_POST["LOGIN_DATA"]; } else {  var_dump($_POST["LOGIN_DATA"]); die("値が入力されていません"); exit; } //↑ここでdieを通ります

試したこと

ContentTypeを足さないと別のErrorが発生します。
Internal Server Error 500
syntax error : unexpected end of JSON input

ここに問題に対して試したことを記載してください。
似たような問題が多数ありますが検索しきれませんでした

補足情報(FW/ツールのバージョンなど)

Jquery 1.12.4
PHP 7.1
Server Lolipop

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

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

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

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

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

m.ts10806

2018/05/29 06:51

コードのインデントと改行をもう少しきちんとそろえてもらえますか?読みにくいコードはバグの元となります。あと「補足情報」のところが「HP」となっていますので「PHP」と正しく表記しておいてください。
m.ts10806

2018/05/29 06:51

エラーは自分で打つのではなくコピペしてください。 「JASON 」ではなく「JSON」です。
YasuoHayami

2018/05/29 06:59

失礼いたしました。誤字等修正いたしました
m.ts10806

2018/05/29 07:01

本当に"JASON"とエラーが出ているのですか? < syntax error near unexpected token N in JASON at position
guest

回答2

0

$.ajax({  type: "POST"  , url: "./php/ctrl/loginCheck.php"  , async: false  , data: {"LOGIN_DATA": param} })

一旦このようにして、
受信側では$_POST['LOGIN_DATA']の有無で判定できるでしょう。

そいつをjson_decode()すれば元のデータが抽出できるでしょう。

参考urlなど。
Ajaxでpost送信 - Qiita
jQueryでAjaxを使ってPost送信をする方法:$.post() | UX MILK

回答に頂いたコメントを見るとwebサーバーがデバッグ用になっていないようなので、
下記のドキュメントを参考に設定変更を加えると良いと思います。
【PHP入門】エラー制御とエラーログ出力をマスターしよう! | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト

投稿2018/05/29 06:18

編集2018/05/29 09:04
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

YasuoHayami

2018/05/29 07:08

早々のご回答ありがとうございます。 最初、数回はPHP側でデータの受け取りができていることを確認しました。 $inputData =json_decode($_POST['LOGIN_DATA']) とするとNULLがかえってきましたが、 var_dump($_POST['LOGIN_DATA']); PHP側でデータが受け取れているのを確認しました。 ですが、数回ためしていると、Ajaxでコールバック関数を呼ぶ際に Internal Server Error 500が発生してしまいました。 Ajax側は最初触った以外コードを変えてないので謎です...
退会済みユーザー

退会済みユーザー

2018/05/29 09:04

webサーバーでのerror_logを必ず点検してください。
guest

0

自己解決

PHP

1// session_start();

何かがタイマーが張っていて挙動が変わると思い、session_start()をコメントアウトしたら挙動が安定しました。

JavaScript

1$.ajax({ 2 type: "POST", 3 url: "./php/ctrl/loginCheck.php", 4 async: false, 5 dataType: "JSON", 6 data: {LOGIN_DATA: param} 7})

Server側でErrorは発生していなかったので、Warningを取り、上記のように修正したら正常動作することを確認しました

投稿2018/05/30 04:39

YasuoHayami

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問