2012-04-26 6 views
2

私は、HTMLフォームを使用してユーザーから入力を受け取り、XMLHttpRequestを使用してサーバー(ローカルで実行されている)から情報(xml)を取得するコードを作成しています。情報私はonreadystatechangeのために書いた方法を使ってリストに出力します。しかし、一度それがページに自動的にページを更新し、リストが消えるページにリストを書いている。私は絶対になぜこれをやっているのか分からないのですか? window.onbeforeunloadを使用して強制的にページの更新を停止してリフレッシュを停止することができましたが、これを回避するにはより良い方法があると思っています。次のように私のコードは次のとおりページの更新を中止する

var xmlhttp=null; 

機能byObserver(){

var a = document.forms["byObserverForm"]["observerName"].value; 
a = encodeURIComponent(a); 

if (window.XMLHttpRequest) 
{// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
}else{// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
if (xmlhttp) { 
    xmlhttp.onreadystatechange = onReadyStateByObserver; 
    xmlhttp.open("GET","http://localhost:8004/birdobs/observer/" + a, false); 
    xmlhttp.send(); 
} 
return false; 

}

function onReadyStateByObserver(){ 

if (xmlhttp.readyState == 4){ 

    if (xmlhttp.status == 200){ 

     var xmlDoc = xmlhttp.responseXML; 
     var observations = xmlDoc.getElementsByTagName("observation"); 

     if (observations.length != 0){ 

      // output into unordered list 
      var f = document.createDocumentFragment(); 
      var e = document.createElement("ul"); 
      f.appendChild(e); 
      var ul = f.firstChild; 

      for (i = 0; i<observations.length; i++) { 
       var li = document.createElement("li"); 

       var te = document.createTextNode(observations[i].getAttribute("observer")); 
       li.appendChild(te); 
       ul.appendChild(li); 
      } // end for 
      document.getElementById("content").appendChild(f); 

      window.onbeforeunload = function(){ 
       return "Refresh"; 
      } 


     } 
    } 
} 
//have also tried return false here 

}

私が費やしてきたような任意のヘルプは高く評価されるだろうこれを修正しようと長い間、多くの感謝を事前に! (私はHTMLが必要ではないと思っていたので、私はHTMLを含んでいませんでしたが、それが助けになるかどうか尋ねてください、そして私はそれを掲示します!)私はついにこれをクロームで実行しています。

答えて

2

これが最も可能性が高いです。デフォルトのフォームサブミット処理を実行したくないことをブラウザに通知する必要があります。

あなたのonsubmitメソッドからfalseを返すと、これが実行されます。その後、

**更新**

あなたがonsubmitハンドラを使用していて、関数が呼び出されると仮定すると、byObserverで次のことを試してください:あなたの迅速な返信用

<!-- HTML --> 
<form ... onsubmit="return byObserver()"> 

// javascript 
function byObserver() { 
    ... 
    return false; 
} 
+0

いいえ運がよろしいですか?これが理由だと思います – haakym

+0

@haakym更新を参照してください。 –

+0

それを釘付け!私はonsubmit = "byObserver()"と書いていました。少なくとも、仮想のhi5があなたのところに来ると考えてください。 – haakym

2

フォームの送信時にデフォルトのイベントを停止する必要があります。サブミット時に呼び出される関数の最後にreturn falseがあります。あなたが必要なフォームを提出することによって呼び出されるメソッドの終わりに

+0

おかげで、私はfalseを返す試してみましたどちらの方法でも、フォームのアクション属性を使っていますが、私はまだ運がありません。私は自分の投稿を編集して、コードに加えた変更を含めます。 – haakym

1

submitイベントを停止していない(とブラウザがこのようにフォームのaction属性に指定したページにリダイレクトされます)ので、多分ページがさわやかですreturn false;

に解雇された機能がbyObserverあるように見えますので、あなたが次の操作を行うと思います。ブラウザは、まだフォームを提出しているため

function byObserver(){ 
    [...] 
    return false; 
} 
+0

あなたの返事をありがとう、私はそれで運がなかった! – haakym

+0

私はあなたがインラインでフォームに添付していたことを認識しませんでした。あなたのHTMLを投稿すると、それがはっきりと分かります。このようにイベントをインラインでアタッチすることは悪い習慣とみなされます。 –

+1

はい、私は、私の悪いhtmlを投稿する必要があります!私は間違いなく何かを学んだし、もう一度やり直してはいけません! – haakym

関連する問題