2012-03-17 61 views
0

我有JS代碼的一些問題。當我與對象陣列我的代碼工作正常,但是當我在()這是行不通的。此代碼工作的良好javascript obj vs jQuery

$(window).load(function() { 

    var map = new YMaps.Map(document.getElementById("YMapsID")); 
    map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10); 
    map.addControl(new locationSearchBox()); 

    projects = [{Lat: "lat", Lng: "lng", Address: "address", label: "фывафыва"}, 
       {Lat: "lat", Lng: "lng", Address: "address", label: "авыва"}, 
       {Lat: "lat", Lng: "lng", Address: "address", label: "аваы"}, 
       {Lat: "lat", Lng: "lng", Address: "address", label: "фываl"}]; 


    console.log(projects); 


    $("#project").autocomplete({ 
     minLength: 0, 
     source: projects, 
     focus: function(event, ui) { 
      $("#project").val(ui.item.label); 
      return false; 
     }, 
     select: function(event, ui) { 
      $("#project").val(ui.item.label); 

       map.removeAllOverlays(); 
       var point = new YMaps.GeoPoint(ui.item.Lng, ui.item.Lat); 
       var placemark = new YMaps.Placemark(point); 
       placemark.name = ui.item.label; 
       placemark.description = ui.item.Address; 
       map.addOverlay(placemark); 
       map.panTo(point, {flying: 1}); 

      return false; 
     } 
    }) 

    .data("autocomplete")._renderItem = function(ul, item) { 
     return $("<li></li>") 
      .data("item.autocomplete", item) 
      .append("<a>" + item.label + "</a>") 
      .appendTo(ul); 
    }; 

這個人是不行的=(

$(window).load(function() { 

    var map = new YMaps.Map(document.getElementById("YMapsID")); 
    map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10); 
    map.addControl(new locationSearchBox()); 

    $.get("data.php", 
     function(data){  
      for (var i = 0; i < 4; i++) { 
       projects.push({Lat: data[i][0], label: data[i][1], Lng: data[i][3], Address: data[i][2]}); 
      }   
     }, "json"); 


    console.log(projects); 


    $("#project").autocomplete({ 
     minLength: 0, 
     source: projects, 
     focus: function(event, ui) { 
      $("#project").val(ui.item.label); 
      return false; 
     }, 
     select: function(event, ui) { 
      $("#project").val(ui.item.label); 

       map.removeAllOverlays(); 
       var point = new YMaps.GeoPoint(ui.item.Lng, ui.item.Lat); 
       var placemark = new YMaps.Placemark(point); 
       placemark.name = ui.item.label; 
       placemark.description = ui.item.Address; 
       map.addOverlay(placemark); 
       map.panTo(point, {flying: 1}); 

      return false; 
     } 
    }) 

    .data("autocomplete")._renderItem = function(ul, item) { 
     return $("<li></li>") 
      .data("item.autocomplete", item) 
      .append("<a>" + item.label + "</a>") 
      .appendTo(ul); 
    }; 

誰能幫我

謝謝,迪馬

+0

什麼是 '數據' 包含您在第二個樣本中的調試?它是填充還是在你進入for循環之前的問題? - 編輯:另外,我認爲你應該聲明你的項目變量爲項目= [];在第二個例子中,爲了確保JS知道它是一個數組,並且能夠與您正在使用的.push一起工作,我並不是100%確定它需要它,但它不會受到傷害。 – dougajmcdonald 2012-03-17 13:45:19

+0

錯誤訊息?你需要告訴我們數據對象是什麼樣的。 – joakimdahlstrom 2012-03-17 13:48:31

回答

1

Ajax是異步的;這就是爲什麼您需要將單獨的功能傳遞給$.get,並且您不能僅僅執行var data = $.get(...)

響應數據將在稍後提供,因爲它必須通過網絡獲取。與此同時,其餘的代碼將會執行,因爲代碼依賴於響應,因此爲時尚早。

您需要將所有依賴於該函數中的響應數據的代碼移至$.get(回調函數)。

+0

謝謝!每個工作都很好! – 2012-03-17 14:17:51

0

在使用.push之前,在您的代碼中聲明變量projects作爲數組。 用途:

projects = []; 

然後用

projects.push({yourObject});