2012-03-17 70 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});