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

このコード作業は、この1は

$(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ループに入る前に、それが人口になっているのか、それとも問題になっていますか? - 編集:また、私はあなたがプロジェクト= []としてあなたのプロジェクトの変数を宣言する必要がありますと思います。 2番目の例では、JSが配列であり、使用している.pushでうまく動作することをJSが認識していることを確実にするために、私はそれが必要であると100%確信していませんが、 – dougajmcdonald

+0

エラーメッセージ?データオブジェクトの外観を教えてください。 – joakimdahlstrom

答えて

1

Ajaxは非同期である;。それが理由です$.getに別の機能を渡す必要があります。var data = $.get(...)を行うことはできません。

レスポンスデータは、ネットワーク経由で取得する必要があるため、後で利用可能になります。その間、コードの残りの部分が実行されます。これは、コードが応答に依存しているため、早すぎます。

この関数の応答データに依存するすべてのコードを$.get(コールバック)に渡す必要があります。

+0

ありがとう!すべての良い仕事! –

0

.pushを使用する前に、変数projectsをコード内の配列として宣言してください。 用途:

projects = []; 

その後、

projects.push({yourObject}); 
関連する問題