日曜日, 3月 21, 2010
[JavaScript]XMLHttpRequestのstatusで「エラーを特定できません」のエラーが出る!
▼質問
XMLHttpRequestのstatusで次のJavaScriptエラーが出るんだ!
「エラーを特定できません」
どうしてかわかるかい?
プログラムはこんな感じだ。
簡単に説明すると
非同期(Async)通信でサーバにある適当なファイルを
使って動作確認をするプログラムを作成したんだ。
request変数でXMLHttpRequestオブジェクトを取得して
div要素に各情報を出力しているプログラムなんだ。
request.onreadystatechange = function() {
document.getElementById( "request_readyState" ).innerHTML = request.readyState;
document.getElementById( "request_status" ).innerHTML = request.status;
if ( (request.readyState == 4) && (request.status == 200) ) {
document.getElementById( "request_result" ).innerHTML = "正常";
}
else {
document.getElementById( "request_result" ).innerHTML = "異常";
}
}
request.open( "POST", url, true );
request.send("");
次の行でエラーになるんだ。
「document.getElementById( "request_status" ).innerHTML = request.status;」
▼回答
onreadystatechangeイベントは、XMLHttpRequestオブジェクトの
ready状態(readyState)が変化したときに発生するため、
XMLHttpRequestオブジェクトのstatusを取得する時は、
readyStateを考慮する必要があるんだ。
0 = uninitialized(初期化されてない)
1 = loading(読み込み中)
2 = loaded(読み込み完了)
3 = interactive(相互通信可能)
4 = complete(全ての処理が完了した)
すると、次の様なプログラムになるから参考にしてみてくれ!
request.onreadystatechange = function() {
document.getElementById( "request_readyState" ).innerHTML = request.readyState;
if ( request.readyState == 4 ) {
document.getElementById( "request_status" ).innerHTML = request.status;
if ( request.status == 200 ) {
document.getElementById( "request_result" ).innerHTML = "正常";
}
else {
document.getElementById( "request_result" ).innerHTML = "異常";
}
}
}
request.open( "POST", url, true );
request.send("");
■参考サイト
XMLHttpRequest
Status codes in HTTP
XMLHttpRequestのstatusで次のJavaScriptエラーが出るんだ!
「エラーを特定できません」
どうしてかわかるかい?
プログラムはこんな感じだ。
簡単に説明すると
非同期(Async)通信でサーバにある適当なファイルを
使って動作確認をするプログラムを作成したんだ。
request変数でXMLHttpRequestオブジェクトを取得して
div要素に各情報を出力しているプログラムなんだ。
request.onreadystatechange = function() {
document.getElementById( "request_readyState" ).innerHTML = request.readyState;
document.getElementById( "request_status" ).innerHTML = request.status;
if ( (request.readyState == 4) && (request.status == 200) ) {
document.getElementById( "request_result" ).innerHTML = "正常";
}
else {
document.getElementById( "request_result" ).innerHTML = "異常";
}
}
request.open( "POST", url, true );
request.send("");
次の行でエラーになるんだ。
「document.getElementById( "request_status" ).innerHTML = request.status;」
▼回答
onreadystatechangeイベントは、XMLHttpRequestオブジェクトの
ready状態(readyState)が変化したときに発生するため、
XMLHttpRequestオブジェクトのstatusを取得する時は、
readyStateを考慮する必要があるんだ。
0 = uninitialized(初期化されてない)
1 = loading(読み込み中)
2 = loaded(読み込み完了)
3 = interactive(相互通信可能)
4 = complete(全ての処理が完了した)
すると、次の様なプログラムになるから参考にしてみてくれ!
request.onreadystatechange = function() {
document.getElementById( "request_readyState" ).innerHTML = request.readyState;
if ( request.readyState == 4 ) {
document.getElementById( "request_status" ).innerHTML = request.status;
if ( request.status == 200 ) {
document.getElementById( "request_result" ).innerHTML = "正常";
}
else {
document.getElementById( "request_result" ).innerHTML = "異常";
}
}
}
request.open( "POST", url, true );
request.send("");
■参考サイト
XMLHttpRequest
Status codes in HTTP
日曜日, 3月 14, 2010
[JavaScript]XMLHttpRequestの使用方法
▼質問
JavaScriptを使って簡単にWEBサーバの状態を監視したいんだ。
何かいい方法はないか教えてくれないか!
▼回答
それなら、XMLHttpRequestを使うとできると思うよ。
簡単な手順とサンプルを教えてあげるから参考にしてくれ!
① XMLHttpRequestオブジェクト生成(IE用とそれ以外で処理分岐)
② 非同期通信の時は、onreadystatechangeイベントの登録
③ openメソッドを使って、サーバへのリクエスト方法を指定
④ sendメソッドを使って、サーバへのリクエストする(データ送信)
⑤ readyStateプロパティを使ってサーバからデータを受信できたか調べる
⑥ statusプロパティを使って正常に取得できたか調べる
⑦ responseText・responseXMLプロパティを使って受信データを処理する
同期(Sync)通信
非同期(Async)通信
出力
■参考サイト
IEのonreadystatechangeイベントハンドラは、1回しか反応しないんでしょうか? - Yahoo!知恵袋
JavaScriptを使って簡単にWEBサーバの状態を監視したいんだ。
何かいい方法はないか教えてくれないか!
▼回答
それなら、XMLHttpRequestを使うとできると思うよ。
簡単な手順とサンプルを教えてあげるから参考にしてくれ!
① XMLHttpRequestオブジェクト生成(IE用とそれ以外で処理分岐)
② 非同期通信の時は、onreadystatechangeイベントの登録
③ openメソッドを使って、サーバへのリクエスト方法を指定
④ sendメソッドを使って、サーバへのリクエストする(データ送信)
⑤ readyStateプロパティを使ってサーバからデータを受信できたか調べる
⑥ statusプロパティを使って正常に取得できたか調べる
⑦ responseText・responseXMLプロパティを使って受信データを処理する
同期(Sync)通信
function send_sync() {
var now = new Date();
var url = "test.jsp?NOW_DATE=" + now;
var ret = false;
var request = null;
if ( window.XMLHttpRequest ) {
// Mozilla, Safari, etc
request = new XMLHttpRequest();
}
else if ( window.ActiveXObject ) {
// IE
try {
request = new ActiveXObject( "Msxml2.XMLHTTP" );
} catch (e) {
try {
request = new ActiveXObject( "Microsoft.XMLHTTP" );
} catch (e) {}
}
}
if ( !request ) {
alert( 'Giving up :( Cannot create an XMLHTTP instance' );
return;
}
request.open( "POST", url, false );
request.send("");
document.getElementById( "request_readyState" ).innerHTML = request.readyState;
document.getElementById( "request_status" ).innerHTML = request.status;
if ( (request.readyState == 4) && (request.status == 200) ) {
request_Headers.innerHTML = request.getAllResponseHeaders();
document.getElementById( "result_post" ).innerHTML = "正常";
}
else {
document.getElementById( "result_post" ).innerHTML = "異常";
}
}
非同期(Async)通信
function send_async() {
var now = new Date();
var url = "test.jsp?NOW_DATE=" + now;
var ret = false;
var request = null;
if ( window.XMLHttpRequest ) {
// Mozilla, Safari, etc
request = new XMLHttpRequest();
}
else if ( window.ActiveXObject ) {
// IE
try {
request = new ActiveXObject( "Msxml2.XMLHTTP" );
} catch (e) {
try {
request = new ActiveXObject( "Microsoft.XMLHTTP" );
} catch (e) {}
}
}
if ( !request ) {
alert( 'Giving up :( Cannot create an XMLHTTP instance' );
return;
}
request.onreadystatechange = function() {
document.getElementById( "request_readyState" ).innerHTML = request.readyState;
if ( request.readyState == 4 ) {
document.getElementById( "request_status" ).innerHTML = request.status;
if ( request.status == 200 ) {
request_Headers.innerHTML = request.getAllResponseHeaders();
document.getElementById( "result_post" ).innerHTML = "正常";
}
else {
document.getElementById( "result_post" ).innerHTML = "異常";
}
}
}
request.open( "POST", url, true );
request.send("");
}
出力
結果:<div id="request_result"></div>
readyState:<div id="request_readyState"></div>
status:<div id="request_status"></div>
ResponseHeaders:<div id="request_Headers"></div>
■参考サイト
IEのonreadystatechangeイベントハンドラは、1回しか反応しないんでしょうか? - Yahoo!知恵袋
木曜日, 3月 11, 2010
[Excel]相対位置にある合計範囲をコピーでリンク
▼質問
ある列のデータ範囲に相対位置で合計したい範囲が12点づつあるんだ。
その合計だけをあるセルに一列で並べたいんだ。
どうやったらできるか教えてくれ!!
▼回答
OFFSET関数とROW関数で実現できるよ!
E列に12点づつ合計したいものがあるとする。
その合計をA1からリストすると次の様になる。
A1=SUM(OFFSET($E$1,12*(ROW()-1),0*1,12,1))
A2=SUM(OFFSET($E$1,12*(ROW()-1),0*1,12,1))
A3=SUM(OFFSET($E$1,12*(ROW()-1),0*1,12,1))
:
:
A1だけコピぺして後はセルのコピーで簡単にできるよ!!
ある列のデータ範囲に相対位置で合計したい範囲が12点づつあるんだ。
その合計だけをあるセルに一列で並べたいんだ。
どうやったらできるか教えてくれ!!
▼回答
OFFSET関数とROW関数で実現できるよ!
E列に12点づつ合計したいものがあるとする。
その合計をA1からリストすると次の様になる。
A1=SUM(OFFSET($E$1,12*(ROW()-1),0*1,12,1))
A2=SUM(OFFSET($E$1,12*(ROW()-1),0*1,12,1))
A3=SUM(OFFSET($E$1,12*(ROW()-1),0*1,12,1))
:
:
A1だけコピぺして後はセルのコピーで簡単にできるよ!!