2011-01-18 9 views
1

comment.onreadystate関数内のすべてのコメントが機能するが、次のalert()はそうでないことがわかりません。スクリプトは、ifステートメントの後に壊れているようです。if文の後にJavascriptを壊す

私のコードを探している人には本当に感謝しています。どうもありがとう。

function positionHandler(position) { 
     if (!document.getElementById("span")) document.body.appendChild(document.createElement("span"));    
     document.getElementsByTagName("span")[0].innerHTML = "("+position.coords.latitude+","+position.coords.longitude+")"; 
     request = new XMLHttpRequest(); 
     request.asycnc = false; 
     request.open('GET','get.php?latitude='+position.coords.latitude+'&longitude='+position.coords.longitude); 
     request.onreadystatechange = function() { 
      if (request.readyState != 4) return false; 
      else if (request.readyState == 4 && request.status == 200) { 
       var results = request.responseXML.getElementsByTagName('note'); 
       for (var i in results) { 
        if (!document.getElementById(results[i].getAttribute('id'))) { 
         var note = document.createElement('div'); 
         note.innerHTML = results[i].childNodes[2].childNodes[0].nodeValue; 
         note.id = results[i].getAttribute('id'); 
         document.getElementById('main').appendChild(note); 
         //everything up until this point works 
        } 
       } 
       alert("this doesn't work 1"); 
      } 
      alert("this doesn't work 2"); 
     } 
     request.send(null); 
     alert("this does work!"); 
    } 

    var position = navigator.geolocation.watchPosition(positionHandler); 
+0

エラーログには何も表示されますか? – Shadikka

+1

たとえば、コメントを書いた場所やif文の直後など、他の警告を入力してください。さらに、Firebugがあなたを助けます(コンソールタブ)。 – bluish

+0

具体的なエラーが発生していますか? –

答えて

-1

この行 - >警告( "これは機能しません");おそらくループは無限大であるため動作しません。 この行 - >警告(「これは動作しません2」);この条件がelse if (request.readyState == 4 && request.status == 200)がfalseの場合にのみ機能します。

3番目のアラートは、最初のアラートの問題を修正した場合に有効です。あなたのループをチェックしてください。

ベスト、

+0

あなたはコードを誤解していると思います。 'for(var i in results)'は、有限個の項目を通して列挙します。だから、最初の警告*は発射すべきです。 2番目のアラートは 'else if'ステートメントによって管理されないので、関係なく*起動する必要があります。 –

+0

"$ .each()"を代わりに使ってみましたか? –

+0

* javascript *には$オブジェクトがありません... – annakata

0

文の順序を変更してみてください。

function positionHandler(position) { 
    if (!document.getElementById("span")) document.body.appendChild(document.createElement("span"));    
    document.getElementsByTagName("span")[0].innerHTML = "("+position.coords.latitude+","+position.coords.longitude+")"; 
    request = new XMLHttpRequest(); 
    request.asycnc = false; 
    // set the eventhandler logic 
    request.onreadystatechange = function() { 
     if (request.readyState != 4) return false; 
     else if (request.readyState == 4 && request.status == 200) { 
      var results = request.responseXML.getElementsByTagName('note'); 
      for (var i in results) { 
       if (!document.getElementById(results[i].getAttribute('id'))) { 
        var note = document.createElement('div'); 
        note.innerHTML = results[i].childNodes[2].childNodes[0].nodeValue; 
        note.id = results[i].getAttribute('id'); 
        document.getElementById('main').appendChild(note); 
        //everything up until this point works 
       } 
      } 
      alert("this doesn't work 1"); 
     } 
     alert("this doesn't work 2"); 
    } 
    // the event will be triggered here 
    request.open('GET','get.php?latitude='+position.coords.latitude+'&longitude='+position.coords.longitude); 
    request.send(null); 
    alert("this does work!"); 
} 

var position = navigator.geolocation.watchPosition(positionHandler); 

理由は、それがすでにrequest.open(...)文によって呼び出された後、あなたがハンドラを設定しているということです。

これが役に立ちます。

+0

華麗な、ありがとうの束 – Tom

+0

いつでも喜んで助けてください。 – Peter

関連する問題