- PR -

JavaScriptでlengthを参照しようとするとErrorが発生してしまう。

1
投稿者投稿内容
くろまめ
会議室デビュー日: 2005/04/01
投稿数: 6
投稿日時: 2006-07-19 17:48
いつもお世話になっております。

JavaAppletを使用したwebアプリケーションを作成しているのですが、
客先の環境だけでエラーが発生するらしく、非常に困ってます。
もし、何か分かる方がいらっしゃったらご教授をお願いいたします。

【環境】
ブラウザ:IE6.0
JRE :SunJava 1.5.0_01

【現象】
1 var a = [JavaAppletからデータを取得 データは,区切りのテキスト];
2
3 if(a != "" && a != undefined)
4 {
5 temp_sd = a.split(",");
6 var b = temp_sd.length % 2;
7 }
を実行すると

6行目で、
"temp_sd.length"はNull またはオブジェクトではありません。
という、エラーが発生するようです。
※JavaAppletからデータを取得している箇所は、カンマ区切りの長い文字列が取得できています。
 (800バイト位の文字列で、全角も混じっています。splitが成功すると、length=160位になるようです)
※自社の環境では1回も発生しません。
 他の環境では、どのマシンで行っても必ず発生するそうです。
※他にtemp_sd変数を使用している箇所はありません

このエラーが出る場合は、temp_sdがnullの場合だと思うのですが、
split()でnullが返るというのが理解できません。

単純な質問かもしれませんが、客先環境ですのでdebugができなく
大変困ってます。
何卒よろしくお願い足します。
Vacant-Eyes
ベテラン
会議室デビュー日: 2004/08/15
投稿数: 97
投稿日時: 2006-07-19 18:27
split()でnullが返ってきているのではなく、何らかの原因でお客様先で
[JavaAppletからデータを取得 データは,区切りのテキスト]
が成功せず、aがnullになっているのではないでしょうか。

aがnullの場合は
if(a != "" && a != undefined)
はtrueとなりますので、nullのlengthを参照しようとしてJavaScriptエラーが発生しているものと思われます。

お客様先環境で、JavaAppletからデータを取得できているかどうかを確認する必要がありますね。

[ メッセージ編集済み 編集者: Vacant-Eyes 編集日時 2006-07-19 18:29 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-19 18:32
a が null の場合は、split の段階でエラーになるかと思いますが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-07-19 19:32
5行目と6行目の間に、本当になにもないんでしょうか。
temp_sdにvarがついてないことや、bにvarがついてることが気になるんですが。

aのチェックは

if (a)

でやると空文字もundefinedもnullも弾けますね。
くろまめ
会議室デビュー日: 2005/04/01
投稿数: 6
投稿日時: 2006-07-19 23:27
Vacant-Eyesさん、じゃんぬねっとさん、mioさん
早速の書き込みありがとうございました。
(その割には返事が遅くなってすみません)

Vacant-Eyesさんのおっしゃるとおり、
aがnullの可能性もあるので、
疑ってみたんですが・・・・・
じゅんぬねっとさんがおっしゃるとおり、
splitでエラーが出てしまうようです。

mioさん
> 5行目と6行目の間に、本当になにもないんでしょうか
それが・・・なにもないです。
確かに、temp_sdにvarがないのは気にはなっていたのですが、
ソースと同じく、あえてそのまま書きました。
これが原因って可能性もありますでしょうか?
(ちなみに、他で使用も宣言もされていません)

開発環境ではまったく再現しないので、
環境的な問題が怪しいと思うのですが・・・。
(Googleツールバー等の環境も含め)
何か知ってる方がいらっしゃったら、
引き続き、ご助言お願いいたします。
未記入
会議室デビュー日: 2006/05/07
投稿数: 18
投稿日時: 2006-07-20 01:33
a には全角も混じっているとありますが

マルチバイトの文字が正しく認識できていないため

区切り文字であるカンマが認識できなくて

temp_sd が null になってしまっているということはないでしょうか。

METAタグでの文字コード指定は正しく行っていますでしょうか。

また、HTMLファイルの文字コードが UTF-8 で

外部JavaScriptファイルを読み込みむ形式を使用していませんか。
(当然、外部JavaScriptファイル UTF-8 です)
くろまめ
会議室デビュー日: 2005/04/01
投稿数: 6
投稿日時: 2006-07-20 11:17
書き込み、ありがとうございます。

早速、文字コードを確認したところ、
外部jsファイル・・・・・・・・Shift-JIS
jsファイルを参照するhtml・・・Shift-JIS
Appletタグのあるフレーム・・・UTF-8
でした

文字コードをすべてUTF-8に修正して、
再度客先で実行してもらおうと思います。
また結果を報告致します。

皆様、本当に書き込みありがとうございました!!
1

スキルアップ/キャリアアップ(JOB@IT)