• 締切済み

javascript : undefinedについて

プログラム書き始めの初心者なのですがjavascriptでの「undefined」の表示に困っています。 prototype.jsを使っています。 以下がプログラムの一部なんですが MyPhotoObj= new Object(); //var MyPhotoObj.curUser; //var MyPhotoObj.curPic; var j=0; window.onload= function(){ // command syntax: MyPhotoR.html?room=Demo&user=ikeda&role=s&ctrl=1&w=320&h=240 //alert("MyPhotoOnLoad="+location.href); MyPhotoObj.MyDir=location.href.substring(0,location.href.indexOf("/MyPhotoR")+1); //alert(MyPhotoObj.MyDir); var keys= location.search.split("&"); MyPhotoObj.room=keys[0].split("=")[1]; MyPhotoObj.myName=keys[1].split("=")[1]; MyPhotoObj.curUser=keys[2].split("=")[1]; MyPhotoObj.role=keys[3].split("=")[1]; MyPhotoObj.ctrl=keys[4].split("=")[1]; MyPhotoObj.mess=keys[5].split("=")[1]; var width=53; var height=40;    ・・略・・ デバッグすると、 MyPhotoObj.myName=keys[1].split("=")[1]; の行で keys[1] is undefined というエラーがでます。 なぜでしょうか? 宜しくお願いします。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

きちんとGETで値がわたってないのでは? スペルミスなど単純になケアレスミスの可能性がたかいです var keys= location.search.split("&"); の直後に alert(keys.length) して1以上の数字がかえってきますか?

shiryo26
質問者

お礼

できました! 完全に自分の間違いでした。 丁寧にありがとうございました。

回答No.1

keys配列を作っている部分 > var keys= location.search.split("&"); これが何をしているかわかりますか? ヒント > window.onload= function(){ > // command syntax: MyPhotoR.html?room=Demo&user=ikeda&role=s&ctrl=1&w=320&h=240 以下蛇足 MyPhotoR.html?user=ikeda&role=s&room=Demo&ctrl=1&w=320&h=240 このように順番を変えるだけで動かなくなるので、あまり良いサンプルとはいえないと思います。

shiryo26
質問者

補足

talooさんコメントありがとうございます 。 var keys= location.search.split("&"); は、"&"で分割し、その結果を配列として返していると認識しているのですが。 ここでは MyPhotoR.html?room=Demo&user=ikeda&role=s&ctrl=1&w=320&h=240 を MyPhotoR.html?room=Demo、user=ikeda、role=s、ctrl=1、w=320、h=240 を順番にkeysに入れているので keys[1]には user=ikedaが入っていると思います。 なので、なぜundefinedになるのかがわからないです。 よろしくお願いします。

関連するQ&A

  • なぜ空白が?

    Ajaxを用いてphpファイルにアクセスするプログラムを書きました ・・・略・・・ new Ajax.Request("MyPhotoSet.php?room="+MyPhotoObj.room+"&user="+MyPhotoObj.curUser+"&role="+MyPhotoObj.role+"&pic=1&mess=", { method:"get", onSuccess:MyPhotoObj.Entered,onFailure: EnteredError}); } ・・・略・・・ MyPhotoSet.phpのファイルにリクエストしてから「?」以降の文字を引数として渡しています。 [使用したPHPファイル] <?php $RoomName=$_GET["room"]; $UserName=$_GET["user"]; $role=$_GET["role"]; $pic=$_GET["pic"]; $mess=$_GET["mess"]; print"".$UserName."/".$role."/".$pic."/".$mess.""; ?> 上記のphpファイルにアクセスした後MyPhotoObj.Entered関数に"".$UserName."/".$role."/".$pic."/".$mess."";を返しています。 [MyPhotoObl.Entered関数] MyPhotoObj.Entered = function (myRequest){ var buff=myRequest.responseText; if(buff=="") exit(); alert("Entered="+buff); user=buff.split("/")[0]; role=buff.split("/")[1]; pic=buff.split("/")[2]; mess=buff.split("/")[3]; $("im").src=MyPhotoObj.MyDir+MyPhotoObj.room+"/"+user+"/"+pic+".jpg"; $("name").value=user; $("mess").value=mess; ここでalertを確認すると、 Entered= ikeda/w/1/ となりikedaの前に空白が入ってしまうのですが、これはなぜでしょうか? 消す方法はあるのでしょうか?? 宜しくお願いします。

  • jqueryでアクセス時一度だけリロード

    Firefoxで別ページからアクセスした際にウインドウの位置がずれないようにする対策で、 アクセス時に一度だけリロードするようプログラムしました。 if($.cookie("access") == undefined) { alert("1"); $.cookie("access","true"); setTimeout(function(){ var url = location.href; location.href = url; },300); } else { alert("2"); $.removeCookie("access"); } jquery.cookieを使って上記のように実装したのですが、 location.hrefした後にalert("2")に入らない状態です。 現状ですと、2回URLを手動で叩かないと、alert("2")に入らない状態で、 一度のアクセスでalert("2")に入りつつ、2回目のアクセスでcookieを削除できればと思います。 cookieを使わない方法でももちろん大丈夫なのですが、 対策方法がお分かりいただけましたらご教授のほどよろしくお願いします。

  • .split()

    javascriptに.split()というメソッドがありますが分割するという意味だと思いますが var thankyou = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); みたいな感じになったとき複数のオブジェクトになるのですか?

  • javascriptの問題数を増やしたいです。

    javascriptの出題問題数を増やしたいです。 どこの数値を変更すればいいですか? 今10問までですけれども例えば40問まで増やしたいとすればどの数値を変更すればいいですか? window.onload = function(){ var data = location.href.split("?")[1]; var nowQ = data.substr(0,2); var allQ = data.substr(2,2); var okQ = data.substr(4,2); var nowA = data.substr(6,2); 参考URL https://www.kuuneruch.com/javascript01/ よろしくお願いします。

  • javascriptでGETパラメータを扱う

    javascript初心者です。 javascriptでURLをGETパラメータとして取得して、その値を HTMLのaタグのリンク先に指定しようとしています。 こんな感じに出来たらいいと思っています。 ↓ <a href="[GETパラメータで取得したURL]">[GETパラメータで取得したURL]</a> GETパラメータの取得は自力で調べて下記のように記述すればできることがわかりましたが、 aタグのリンク先に指定する記述方法が分かりません。 助けてください。 よろしくお願いします。 <script type="text/javascript"> function getUrlVars() { var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); for(var i = 0; i < hashes.length; i++) { hash = hashes[i].split('='); vars.push(hash[0]); vars[hash[0]] = hash[1]; } return vars; } </script>

  • Javascriptの修正がわかりません

    ルート「/」からの設定をkaitoフォルダー「/kaito/」に変更したいのですが、どこを修正すればいいのかわかりません。 $(function () { var url = location.pathname ; var ary = url.split("/"); while ( ary.length >= 3 ) { ary.pop(); } var str = ary.join("/")+"/"; if ( str == "//" ) str = "/"; var target = $("#gnav ul").children("li").children('a[href="'+str+'"]'); if ( target.length <= 0 ) return ; var imgPath = target.children("img").attr("src"); target.children("img").attr("src",imgPath.replace( /_o(\.[a-z]+)$/, "_a"+"$1")); });

  • 【javascript】firefoxでの、alertについて

    はじめてOK Waveで質問します。 よろしくお願いします。 javascriptについての質問です。 form内の複数のradioの項目の組み合わせに応じて、if文でlocation.hrefでページ遷移するというjsを書きました。 IEでは動作しましたが、firefoxで動作しませんでした。 firefoxで動かない原因が分からず、自分なりにalertを使いながら原因を探っていたところ、 if文の次にalertを書いたところ、firefoxでも動作することができました。 ------------------------------ function pageshift() { var one, two; for (i = 0; i < 2; i++) { if(document.form.one[i].checked){ one = document.form.one[i].value; } } for (i = 0; i < 2; i++) { if(document.form.two[i].checked){ two = document.form.two[i].value; } } if(one == 'a' && two == 'a') { window.location.href = 'aa.html';} } else if(one == 'a' && two == 'b') { window.location.href = 'ab.html';} } alert('test'); } ------------------------------ (最後のalert('test');を書いたらそれまでfirefoxでは動作しなかったものが、動作した、ということです。IEではalert('test');がなくても目的通りに動作しています。) しかしながら、alertでメッセージが出てきてしまうのは避けたいと考えています。 alertを書いてページ遷移のfunctionが動作(正常に処理?)したとするならば、alertと同じような処理状態でなおかつメッセージを表示しないような状態に持っていければ、目的どおりになるのではないかと考えています。 どのように記述していけばいいのでしょうか・・・? よろしくお願いいたします。

  • javascript サーバーファイル有無チェック

    社員番号を入力させその番号に応じたページにジャンプするような、 下記のような簡単なサイトを作りました。 var no = document.no.txtb.value; var fname = no + ".html"; location.href = no; (抜粋) ここで、no + ".html" が存在しなければ Alert するチェックを追加したいのですが、 javascriptでこういった存在チェックは可能でしょうか? 携帯電話(ガラケー)からアクセスするようなサイトなので、 高度な仕組みは用いることができません。 よろしくお願いします。

  • JavaScriptのGPSについて

    現在地の名前を入力し、GoogleMapで表示してその地図を保存するというものを作ったのですが 以下のコードで現在地を取得するとなぜかiPhoneでもAndroidでもバルセロナが表示されます なぜなのでしょうか? 開発環境はMonacaです <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, user-scalable=no"> <script src="components/loader.js"></script> <link rel="stylesheet" href="components/loader.css"> <link rel="stylesheet" href="css/style.css"> <script> </script> </head> <body> <h1>ブックマークMAP</h1> <div id="new_div"> 店名:<input id="name_txt" type="text" value="" size="20" /><br /> <input id="save_btn" type="button" value="記録" /> </div> <div id="list_div">なし</div> <script> function $(id) { return document.getElementById(id); } //初期処理 var items = []; window.onload = function() { if (window.localStorage == undefined && navigator.geolocation == undefined) { alert("HTML5未対応端末です"); return; } //既存リスト表示 var list = localStorage.getItem("shoplist"); if (list == null) { list = ""; }else{ items = list.split("\n"); showItems(); } //記録ボタンを押したときの設定 $("save_btn").onclick = save_btn_clickHandler; }; //ブックマーク一覧の表示 function showItems() { var map_url = "http://maps.google.co.jp/maps?q="; var html = "<ul>"; for (var i in items) { var data = items[i].split("\n"); var name = data[0]; var lat = data[1] var lon = data[2] var link = "<a href='"+map_url+lat+","+lon+"'>"+name+"</a>"; html += "<li>"+link+"</li>"; } html += "</ul>"; $("list_div").innerHTML = html; } //保存ボタンを押したときの設定 function save_btn_clickHandler() { if ($("name_txt").value == "") { alert("場所を入力してください"); return; } //位置情報の取得 navigator.geolocation.getCurrentPosition( successCallback, errorCallback); $("save_btn").value = "現在地取得中" } //成功したとき function successCallback(position) { var lat = position.coords.latitude; var lon = position.coords.longitude; var name_txt = $("name_txt"); //場所+位置情報を保存 var item = name_txt.value + "/t" + lat + "/t" + lon; items.push(item); var list = items.join("\n"); try { localStorage.removeItem("shoplist"); localStorage.setItem("shoplist", list); } catch (err) { alert("保存失敗"); } $("save_btn").value = "記録"; name_txt.value = ""; showItems(); } //失敗したとき function errorCallback(err) { alert("失敗("+err.code+")"+err.message); $("save_btn").value = "記録"; } </script> </body> </html>

  • JavaScriptを使って毎日決まった時間に同じ作業を繰り返し行うには?

    毎日15時になったら parent.frames("A1").location.href = "2-A.html" parent.frames("B1").location.href = "2-Aクリック.html" を行いたい。というJavascriptを組みたいのですが、全く謎に包まれてきました。 色んな所で調べながらで調べながら自分なりに下記の様に作ってみたんですが…良くわからなくなってしまいました… なんとかタイマーらしくカウントダウンはするんですが、時間を過ぎると白紙になってしまいます… なんとか助けていただけないでしょうか? <body> <p align="center" class="style1"> 発射まで<input type="text" name="tm2" size="1">時間<input type="text" name="tm2" size="1">分<input type="text" name="tm2" size="1">秒</p> <script type="text/javascript"> var CountDownGenerator = function (y, m, d, hh, mm, ss) {  var t = new Date(y, m-1, d, hh || 0, mm || 0, ss || 0);  var s = y + '年' + m + '月' + d + '日' +   (undefined === hh ? '': hh + '時') +   (undefined === mm ? '': mm + '分') +   (undefined === ss ? '': ss + '秒');  return function () {   var sa = t - (new Date);   sa = sa / 1000 |0;   if (sa<0) return { end: true };   var ss = sa % 60; sa = sa / 60 |0;   var mm = sa % 60; sa = sa / 60 |0;   var hh = sa % 24; sa = sa / 24 |0;   var dd = sa;   return {    day: dd, hours: hh, minutus: mm, seconds:ss, str:s, end:false   };  };  } var Viewer = function (c, nm) {   var txt = document.getElementsByName(nm);    return function() {   var time = c();   if (time.end) return   txt[0].value = time.hours;   txt[1].value = time.minutus;   txt[2].value = time.seconds;   setTimeout( arguments.callee, 1000);  }(); }; var hiduke = new Date(); var myyear = hiduke.getYear(); // 年 var mymonth = hiduke.getMonth() + 1; // 月 var myday = hiduke.getDate(); // 日 var myhour = hiduke.getHours(); // 時 var mymin = hiduke.getMinutes(); // 分 var mysec = hiduke.getSeconds(); // 時 //--------実際に実行する時間--- var hahour = '15';// 時 var hamin = '00';// 時// 分 var hasec = '00';// 時 //----------------------------- var jikkou = CountDownGenerator(myyear, mymonth, myday, hahour,hamin,hasec); Viewer(jikkou, 'tm2'); if(!jikkou << hiduke){ parent.frames("A1").location.href = "2-A.html" parent.frames("B1").location.href = "2-Aクリック.html" } //--> </script>

専門家に質問してみよう