jQuery Ajax通信でブラウザによってParseErrorが出る件
AjaxといってもjQueryのおかげでだいぶ難しいものではなくなりましたよね。デザイナでもサーバサイドが書けるプログラマと組めばわけはないでしょう。
しかし、ちょっとハマったのが上述した現象。
- HTMLからJavaScript(jQueryベース)でAjax通信で値をPOST
- 受け取ったPHPは$_POSTに入っている変数をそのまま返す
- 返すデータ値はプレーンテキスト
- 受け取ったデータ値をJavaScriptでアラート表示
こんな条件の場合、IEだけerrorHandleが返ってきました。はて。
コード例を示しましょうか。
Ajax通信部分:
$(function(){
$("button").click(function(){
$.ajax({
type: 'POST',
data: {
"id" : $(this).parent().attr('name'),
"answer" : $(this).attr('class')
},
datatype: "text", // 返ってくる値の形式をTEXTに指定
url: 'return.php',
success: handleSuccess, // 通信成功時の処理
error: handleError, // 通信失敗時の処理
});
});
});
// 通信成功時の関数
var handleSuccess = function(data, datatype) {
alert("通信に成功しました - " +data);
}
// 通信失敗時の関数
var handleError = function(XMLHttpRequest, textStatus, errorThrown) {
alert('通信に失敗しました - ' + textStatus);
}
サーバ側PHP:
<?php
// POSTされた値を取得
$ID = $_POST['id'];
$answer = $_POST['answer'];
returnResults();
// 結果を返す変数
function returnResults() {
global $ID;
global $answer;
// $resultsに結果を格納してプレーンテキスト形式で返す
$results = 'posted: ' . $ID . ' - ' . $answer;
header('Content-type: text/plain');
print($results);
}
?>
必要ない部分はかなり削ってシンプルにしましたが大体こんな感じ。
で、動かすと次のようにアラートの動作が分かれました。
- Firefoxの場合:
- 通信に成功しました – posted: 00002 – yes
- InternetExproler8の場合
- 通信に失敗しました – parseerror
まさかサーバサイドスクリプトがローカルのブラウザを左右するとも思えず、ずっとJavaScriptを疑っていたんですが、原因はPHPの14行目にありました。
誤:
header('Content-type: text/plain');
正:
header('Content-type: text/plain; charset=utf-8;');
HTTPヘッダはちゃんと書きましょう、って話ですね……
Apatcheの設定にもよりますが、文字コードまで指定しないとIEではパースエラーを返すらしいです。
たいへん勉強になりました。でもやっぱりIEは爆発しろ。
デザイナのくせにまともにデザイン関連のエントリできなくてすみません。今日はとうとうサーバサイドスクリプトまで範囲が広がりました。このブログはどこへ行くんだろう。
Leave a Reply
Search
Tag Cloud
お役立ち ガラス コーディング サイトデザイン チュートリアル デザイン フォント フリー素材 プラグイン レイアウト 背景 色 CSS freebie html if文 Illustrator iPhone JavaScript jQuery MovableType Photoshop Tips UI Web素材カテゴリー
- サイト紹介 (7)
- チュートリアル (17)
- Illustrator (3)
- JavaScirpt (8)
- Photoshop (1)
- サイトデザイン (3)
Popular Entries
2329 views 【jQuery】ラジオボタンのイベント・値のとり方 (JavaScirpt / チュートリアル)
1591 views 【JavaScript】if/else文を一行で書くには? (JavaScirpt / チュートリアル)
663 views jQuery Ajax通信でブラウザによってParseErrorが出る件 (JavaScirpt)
490 views JavaScriptでらくらく 縦割りテーブル (JavaScirpt)
463 views 【JavaScript】2個以上の条件の分岐(switch文) (JavaScirpt / チュートリアル)
The administrator needs to log in and select a Google Analytics account.







