2011-07-26 16 views
0

誰かが私のオブジェクトimgがajax呼び出しの外でその値を受け入れない理由を誰かが伝えることができますか?私はまた、オブジェクトを作成するためにコンストラクタ関数を使用しましたが、それもうまくいきませんでした。そして、解析されたxml値は機能し、私はこれをテストしました。私は成功イベント内のアラート(img.location)を移動した場合、正しい値が表示されますが、それはAjaxの関数の外ではないでしょう。..JavaScriptオブジェクトの作成と割り当てが機能しない

ヘルプしてください...

function getImage(){ 
     img = new Object(); 
     $.ajax({ 
      type: "GET", 
      url: "hvimage.xml", 
      dataType: "xml", 
      success: function(xmlData){ 
       var randImageId = Math.floor(Math.random()*3); 
       $(xmlData).find("image").each(function(index, e){ 
        if(index == randImageId){ 
         img.id = $(this).attr("id"); 
         img.location = $(this).find("location").text(); 
         img.answer = $(this).find("answer").text(); 
        } 
       }); 
      }, 
      error: function(xmdData){ 
       alert("error"); 
      } 
     }); 
     alert("test"); 
     alert(img.location); //Keep getting undefined here.. 
    } 

おかげで再び、

Wenn

+0

非同期JavascriptとXml。キーは非同期です。あなたのAJAXコールは、あなたがアラート・ステートメントを受け取るまでに戻っていません。 –

答えて

6

あなたのAJAXリクエストが非同期、それを実行する前に、それは応答をを待たないの後に来るコードですので。

成功した応答に依存するコードは、success:コールバック内に配置するか、呼び出す必要があります。

function getImage(){ 
    img = new Object(); // 1. create object 

     // 2. send request 
    $.ajax({ 
     type: "GET", 
     url: "hvimage.xml", 
     dataType: "xml", 
     success: function(xmlData){ 

       // 4. response is received, and callback runs 
      var randImageId = Math.floor(Math.random()*3); 
      $(xmlData).find("image").each(function(index, e){ 
       if(index == randImageId){ 
        img.id = $(this).attr("id"); 
        img.location = $(this).find("location").text(); 
        img.answer = $(this).find("answer").text(); 
       } 
      }); 
     }, 
     error: function(xmdData){ 
      alert("error"); 
     } 
    }); 

     // 3. fire alerts 
    alert("test"); 
    alert(img.location); //Keep getting undefined here.. 
} 
+0

ああ...ありがとう! – Wenn

+0

@ウェン:どうぞよろしくお願いいたします。 – user113716

1

あなたが問題を抱えてきた理由は、コードが、あなたがそれをすると思うようで順番に実行されないということです。

成功関数は、非同期要求が返ったときに実行されます。一方、最後の2つの警告は、要求がに送信された直後にトリガされます。最後の2回のアラートで使用したいデータは、まだブラウザでは使用できません。

関連する問題