2011-09-03 122 views
0

我成功地從一些XML創建對象。然後,我試圖將每個新對象放入一個數組的新索引中,該索引最終將包含所有對象。javascript數組對象

但是,數組不斷返回爲空。我的代碼如下:

var $locations = []; 
      /*$obj = {}; 
      $obj['test'] = 'working'; 
      $locations.push($obj);*/ 

      $.ajax({ 
       type:  "POST", 
       url:  "/locations/845/data.xml", 
       dataType: "xml", 
       success: function($xml){ 

        $($xml).find('node').each(
         function(){ 
          $location = {}; 
          //alert($(this).attr('Latitude')); 
          $location['latitude'] = $(this).attr('Latitude'); 
          $location['longitude'] = $(this).attr('Longitude'); 
          $location['city']  = $(this).attr('City'); 
          $location['street']  = $(this).attr('Street'); 

          //alert($location.toSource()); 
          //alert($location['latitude']); 
          $locations.push($location); 
         } 
        ); 
       } 
      }); 
      alert($locations.toSource()); 

創建並插入$ locations數組的註釋對象是一個測試,它的工作原理。但是,ajax成功函數中的實際有用代碼卻沒有。

任何人都可以幫忙嗎?

+0

阿賈克斯是異步的。在Ajax調用完成之前顯示您的警報。 – JJJ

+0

你爲什麼喜歡把'$'放在JS變量前? – Cipi

+0

嗨Cipi,我只使用$在JS變量的前面,因爲我習慣這樣做從編寫PHP代碼。無論您是否使用$ – sisko

回答

4

您的ajax調用是異步的。當你調用它時,它只是開始執行它,其餘的代碼繼續運行。當警報觸發時,ajax尚未完成,直到成功處理函數被調用纔會完成。只有你能夠知道ajax調用完成的地方在於成功處理程序本身。實際上,你想要處理的返回的ajax數據應該從成功處理程序啓動,而不是從調用ajax調用之後執行的代碼中啓動。

如果招行:

alert($locations.toSource()); 

的成功處理函數結束,然後你會看到你的數據。只有這樣才能實際完成ajax調用。

試試這樣說:

 var $locations = []; 
     /*$obj = {}; 
     $obj['test'] = 'working'; 
     $locations.push($obj);*/ 

     $.ajax({ 
      type:  "POST", 
      url:  "/locations/845/data.xml", 
      dataType: "xml", 
      success: function($xml){ 

       $($xml).find('node').each(
        function(){ 
         $location = {}; 
         //alert($(this).attr('Latitude')); 
         $location['latitude'] = $(this).attr('Latitude'); 
         $location['longitude'] = $(this).attr('Longitude'); 
         $location['city']  = $(this).attr('City'); 
         $location['street']  = $(this).attr('Street'); 

         //alert($location.toSource()); 
         //alert($location['latitude']); 
         $locations.push($location); 
        } 
       ); 
       alert($locations.toSource()); 
      } 
     }); 
+0

謝謝!我踢我自己b'cus我應該知道這一點。感謝您的協助。 – sisko