aono1234
@aono1234

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ajax通信レスポンス授受でエラーが発生する。

jsonファイルをjsで受け取れない。

javascriptからjqueryのajaxを使用してPHPにデータを送り
その後、jsonファイルをレスポンスとしてjavascriptへ送付したときにエラーが発生してしまいました。
このエラーはjsのunitが'year'の時は発生せず、'month'と'day'の時だけ発生します。

問題箇所は特定ができており、PHPのcase"month"の計算式とcase "day"の計算式が悪かったようです。
二つとも計算式の中に$yearがあり、この場合の値はNULLとなります。
この2つのコードを消せばうまく動きます。

ただ不思議なのがPHPファイルだけで実行した際にはエラーなどでコードが
途中で止まることはなく実行できていました。
jsonにエンコードしてそれをjsに渡すとエラーになってしまいます。
これはなぜでしょうか?
恐れ入りますが、ご教授いただけると幸いです。
よろしくお願いいたします。

javascript(リクエスト元)(レスポンス先)

//jqueryを使用
	$('.update_btn').on('click',function(){	
		$.ajax({
			url: './SQL_SELECT.php'
			, method: 'POST'
			,timeout: 10000
			, data: 
				{unit:'year',//手動でyear,month,dayに変更する
				start_point:$(`#start`).val(),
				end_point:$(`#end`).val()				
				}
			}
		).done(function(result){
        console.log("成功");
		console.log(result);
		})
		.fail(function(){
			console.log("失敗");

		})
	});

php(リクエスト先)(レスポンス元)

$unit = $_POST['unit'];
$start_point =new DateTime($_POST['start_point']);
$end_point =new DateTime($_POST['end_point']);
$dateDifference =abs(strtotime($_POST["end_point"])- strtotime($_POST["start_point"]));

switch($unit){
    case "year";
        $years  = floor($dateDifference / (365 * 60 * 60 * 24));   

    break;
    case "month";
       $months = floor(($dateDifference - $years * 365 * 60 * 60 * 24) / (30 * 60 * 60 * 24));//←原因1

    break;
    case "day";
         $days   = floor(($dateDifference - $years * 365 * 60 * 60 * 24 - $months * 30 * 60 * 60 *24) / (60 * 60 * 24));//←原因2
      
        
}

header("Content-type: application/json; charset=UTF-8");
echo json_encode("test");

0

2Answer

 たぶんですが、PHPはインタープリタ言語なのでリクエストが飛んでこない限りエラーの原因になるコードが実行されないからだと考えられます。

1Like

Comments

  1. @aono1234

    Questioner

    ご回答ありがとうございます。リクエスト後実行されるコード、リクエスト有無とは関係なく実行されるコードを明確にしたほうがいいかもですね。
    今後のトラブルシューティングのためにも調べておこうと思います。
    ありがとうございました。

具体的な状況が見えない点があります。

ただ不思議なのがPHPファイルだけで実行した際にはエラーなどでコードが
途中で止まることはなく実行できていました。

どんな結果が出力されたのでしょうか?

jsonにエンコードしてそれをjsに渡すとエラーになってしまいます。

どのようなレスポンスを受けて、どのようなエラーになったのでしょうか?

1Like

Comments

  1. @aono1234

    Questioner

    回答ありがとうございます。
    どんな結果が出力されたのでしょうか?=>
      特にエラーはなかったので特になにも出力はされませんでした。
      ちなみにjsonファイルにしようとしていたのは連想配列です。

    どのようなレスポンスを受けて、どのようなエラーになったのでしょうか?=>
      レスポンスを受け取れなかったため.fail(function(){console.log("失敗");}のほう  
       に実行されてしまい。特にエラーコードなどは表示されませんでした。
       ちなみにfail(function(result){console.log(result);}としてブラウザを見ると
        {readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ,
        setRequestHeader: ƒ, overrideMimeType: ƒ, …}
       という表示がされていました。すみません、参考になるでしょうか…
  2. > 特にエラーはなかったので特になにも出力はされませんでした。

    jsonも出力されなかったのであれば、エラーで何も出力されなかったのかもしれません。
    エラー表示の設定を見直せばエラーメッセージなど出力されるかもしれません。

    https://qiita.com/shotets/items/3c95aef631b2c5eadae5

Your answer might help someone💌