2011-08-03 9 views
0

このXMLHttpRequestが正常に動作するのに問題があります。これは私の初めてのajaxであり、すべて正しくフォーマットしているかわかりません。私はウェブ全体を見ていると私は基本的に同じ情報と例を見つけることを維持しますが、特定の要素は異なる順序にある​​ので、私はどちらが正しいと私はそれらを試してきたと何も動作するようではないか分からない。ここに私のコードは次のとおりです。ユーザーがページ内のdivをクリックしたときにXMLHttpRequestの問題 - ローカルマシンとライブサーバーで0のステータスを返す

function ajaxRequest(){ 
    var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] 
    if (window.XMLHttpRequest) 
     return new XMLHttpRequest() 
    else if (window.ActiveXObject){ 
     for (var i=0; i<activexmodes.length; i++){ 
      try{ 
       return new ActiveXObject(activexmodes[i]) 
      } 
      catch(e){ 
       //suppress error 
      } 
     } 
    } 
    else 
     return false 
} 
function getData(fileName){ 
    var fileLoc =encodeURI("assets/"+fileName+".html") 
    alert(fileLoc) 
    var request = new ajaxRequest() 
    request.open("GET",fileLoc,true) 
    var response = request.responseText 
    alert(request.status) 
    alert(response) 
    request.send(null) 
    return response 
} 
function home() { 
    var data = getData("home") 
    var contentDiv = document.getElementByClassName(content) 
    contentDiv.innerHTML = data; 
} 

homeがトリガされます。私はgetDataがアラートがポップアップするのでアクセスされていることを知っていますが、ステータスコードが0になっています。これはローカルマシンとライブサーバーの両方で発生しました。私はlocalhostsが実際のステータスにかかわらず0ステータスを投げることができますが、実際のサーバでも起こっていることを読んでいます。誰かがこの問題を解決したり、関数内のイベントの正しい順序を明確にするのを助けてくれたら、私はそれを非常に感謝しています。

EDIT: 新しいコード:あなたは、応答を待っている間、あなたのスクリプトの残りの部分が実行されますを意味し、要求を非同期に送信するためにXMLHTTPRequestをを言っている

function getData(fileName){ 
    fileLoc = encodeURI("assets/"+fileName+".html") 
    alert(fileLoc); 
    request.onreadystatechange = processData; 
    request.open("GET",fileLoc, false); 
    request.send(); 
    alert(request.readyState); 
    alert(response); 
} 
function processData(){ 
    if (request.readyState==4){ 
     if (request.status==200){ 
      document.getElementsByClassName('content').innerHTML = request.responseText; 
     } 
     else{ 
      alert("An error has occured making the request"); 
     } 
    } 
} 

答えて

1

。応答コード0(初期化されていない)と空の応答が返されます。なぜなら、現在のステータスと応答である関数から戻るときです。

代わりに、状態が変更されたときに呼び出す関数を定義するか、XMLHTTPRequestを同期させます。

あなたに役立つ簡単な例については、this tutorialを参照してください。

+0

大丈夫、それは私の0の状態を取り除いた(今は4)。しかし私は今、私の 'responseText'として' undefined 'を取得しています。何か案は?私は使用している更新されたコードで自分の投稿を編集しました。 – Joe

+0

は、未定義についてのコメントを無視して、私はそれを考え出しました。私の 'processData'関数は要素innerHTMLを設定していません。なぜ私はそれを把握する場合、私はポスト戻るか、あなたが理由をgigureできる場合私に知らせてください – Joe

+0

あなたの問題は、document.getElementyByClassNameを使用しているということです。これは、単一の要素の代わりにclassNameに一致する要素の配列を返します。 document.getElementsByClassName( 'content')[0] .innerHTMLの特定の1つを選択するか、document.getElementById( 'content')。innerHTMLを使用し、要素のidを 'content'に設定します。クラス。 – Dan

関連する問題