脱力系備忘録BloG ホーム »プログラミング

JavaScript FetchでのJSON.parseエラーで悩んだ  

JavascriptのfetchでPHPと非同期通信処理を行う仕組みを作ってました。
この仕組み自体は今までも経験あるのですが、今回はどういうわけか、

JSON.parse: unexpected character at line 1 column 1 of the JSON data

というJavascriptのエラーが発生してその原因を探るのに無駄な時間を割いてしまいましたので備忘録。

JSON_parse_error.png

結論を申しますと、PHPがJSONを書き出す前に余計なテキストを書き出していたのが原因です。

もちろん、真っ先にJSONの書き出しが怪しいと思いました。
それでPHPが書き出すJSONデータをメールで送信して中身を確認したのですが、全く問題が見つからず。
過去に作ったプログラムと比較したりして何が違うかバグ探しをしたけどわからず。

で、やけになってJavascriptのコードの

return response.json();

という箇所を

return response.text();

にして受信内容をconsole.log()で表示してみたらJSONデータの前に余計な文言が書き出されてました。

原因は、外部PHPファイルを読み込んでいるのですが、その読み込むPHPファイルがテスト環境用のもので、その中にテスト用のコメントを書き出す部分が入っていたのが原因でした。
このテスト用PHPファイルをAJAX非同期通信システムで利用するのが初めてだったので、そのようなコメント書き出しがあるなんてことに気が付きませんでした。


理由がわかれば「なんだそんなこと?」ということに限ってなかなかバグが見つからないものです。

とりあえず、非同期処理でJSONデータを受け取るときに

JSON.parse: unexpected character at line 1 column 1 of the JSON data

というエラーが出たときは必ず余計な文字が書き出されているので、それを確認しましょう。

category: プログラミング

VBAでテキストをファイルに書き出してファイルを消すやり方  

EXCELマクロを組んでいて覚えた備忘録。

まずはファイルの書き出し

'書き出すファイルパス
Dim f_path As String
'オープンしたファイル番号
Dim fp As Integer

f_path = "d:書き出すファイル名.txt"
fp = FreeFile
Open f_path For Output As fp
Print #fp, 書き出す文字列または文字列を格納した変数
Close fp



次にファイルの削除
Kill f_path
これだけ。
注意点はゴミ箱に残らず完全に消去される。

category: プログラミング

PHP7.4で動作テストしてたら大量の配列エラーがでる  

これが
Trying to access array offset on value of type null
大量に出る。

PHP7.4では「配列でない値を配列スタイルでアクセスした場合」に警告がでるようになったようです。

例えば
<?PHP
echo $a[1];
?>

このように何も定義されてない状態の変数に配列としてアクセスするとエラーが出るというわけです。

こういうの結構書いちゃってます・・・。

配列として使うつもりだがまだ配列として中身が入ってない場合もあるという変数に配列形式でアクセスするプログラム。結構書いてるねえ。


何らかの対策が必要だとは思いますが・・・、

エラー制御演算子で
<?PHP
echo @$a[1];
?>

ごまかしちゃうとか・・・
E_NOTICEを・・・

上記例のような未定義変数に配列アクセスする場合は「Null合体演算子(??)」できちんと処理するべきでしょうけど・・・

category: プログラミング

Pタグにafter疑似要素を指定したら途中でタグが終了する不思議  

Pタグ「after」疑似要素セレクタを指定したらPタグ内に書かれたブロックタグの直前で強制的にPタグが閉じられるというよくわからない挙動に悩まされたのでメモしておきます。

category: プログラミング

Yahooの地図APIが使えなくなるので国土地理院地図の使い方を調べてみた  

無料で使えてとても便利だったYahooデベロッパーネットワークのYOLP(地図)が2020年10月で使えなくなるようです。
YOLP Web APIにおける一部API・SDK 提供終了のお知らせ

無料サービスはありがたい反面、突然死の洗礼があるので開発者には悩ましい存在です。

で、貧乏開発者の私は性懲りもなく無料地図APIサービスを探すことにしたところ、国土地理院の地図データをAPIとして利用する方法がありました。
国土地理院といえば我が国の国家機関。さすがに突然死はない。だろうと思いたい。
さらにありがたいことにユーザー登録なんて七面倒くさいことなく無料で提供してくれています。
こんなありがたいもの、利用しないわけにはいきません。ということで、その導入方法の初歩的な部分をメモ。

category: プログラミング

JavaScript備忘録 ほんとに些細なことをメモしていく  

JavaScriptでちょっとつまづいたこと、些細な調べものを書き溜めるメモ。

category: プログラミング

LibreofficeでVBAを使う方法が簡単すぎて罠を疑うレベル  

Option VBASupport 1

これを先頭行に追記するだけ。

category: プログラミング

jQueryのfadeInでDisplay inline-block を指定したい  

$("div").fadeIn().css("display","inline-block");
こうやればOK。

$("div").fadeIn()
これだけだと display: block; になっちゃうので困ることがある。

JavaScript、なんか苦手。
そろそろ CSS と統合してシンプルに扱えるようになって欲しい。

category: プログラミング

透過指定のあるPNGをimagejpegで出力すると黒く塗りつぶされる  

256色以下のパレットカラーの場合のPNG画像に透過指定がある場合、サイズ変更しない場合はなにも考えず、

$im = imagecreatefrompng('256色透過.png');
header('Content-type: image/jpeg');
imagejpeg($im, NULL, 70);

で問題なく出力されます。

しかし、リサイズする場合はちょっと工夫しないとJPEG出力したときに透過部分が黒くなってしまいます。
特に、透過指定のあるフルカラーPNGの場合は、リサイズしなくても黒く塗りつぶされてしまいます。

試行錯誤した結果、透過部分を指定した色で塗りつぶすという方法で解決とする。


$imIn = imagecreatefrompng('透過指定のある.png');

$x = imagesx($imIn);
$y = imagesy($imIn);

$imOut = imagecreatetruecolor($x,$y);

#背景を白にする場合
imagefill($imOut, 0, 0, imagecolorallocate($imOut, 255, 255, 255));

imagecopyresampled($imOut,$imIn,0,0,0,0,$x,$y,$x,$y);

header('Content-type: image/jpeg');
imagejpeg($imOut, NULL, 70);


これで透過部分に任意の色がついた状態でJPEG出力されます。

category: プログラミング

PHPでリサイズしたPNG画像の透過背景が真っ黒になる  

imagesavealpha()関数を使用すればOK。


$im = imagecreatefrompng('PNG画像ファイル名');

#imagesavealpha関数を使用するためには アルファブレンディングを無効にする必要がある
imagealphablending($im, false);
imagesavealpha($im, true);

imagepng($im);

category: プログラミング

プロフィール

最新記事

最新コメント

▲ Pagetop