cakePHPをいじって、prototypeでAjaxを組み込んだところエラーが出た。
エラー c00ce56e のため操作を完了できませんでした
調べたところエラーはIEのみでしかでない
IE で prototype の Ajax.Request や Ajax.Updater を使ったときに、いきなりタイトルのようなメッセージが出てしまい、script が停止してしまった。 responseText を取得しようとしただけでエラーがでるため、response そのものを確認することすらできず、なかなか苦労した。
調べたところ、Ajax に対するレスポンスの文字コードが UTF-8 以外の場合にこのエラーがでるらしい。
対策としては、UTF-8 でレスポンスをかえすようにすればよい。(Content-type: text/plain; charset=UTF-8)
ページの文字コードが SJIS などであったとしても、文字化けは起こらない。
あるいは、ISO-8859-1 でレスポンスを返しても良い。ただし、この場合日本語は全て絶対参照で出力する必要がある。
そもそもなんでこの問題が起きるかというと、prototype.js によって送信される Ajax リクエストの文字コードが UTF-8 になっているからのようだ。
リクエストと違う文字コードでレスポンスが帰ってきた場合にエラーが起きる。 |