2012-10-13 3 views
3

는이 같은 JSON 배열 만들려면 :JQuery에서 JSON 배열을 만드는 방법은 무엇입니까?

var ddBasic = [ 
    { text: "Facebook", value: 1, }, 
    { text: "Twitter", value: 2, }, 
    { text: "LinkedIn", value: 3, }, 
    { text: "Foursquare", value: 4, } 
]; 

내가 last.fm에서 데이터를 사용하고 있습니다를, 그래서는 다음과 같이 될 것이다 :

var tags = [ 
     { text: "rock", value: "rock", }, 
     { text: "pop", value: "pop", }, 
    ]; 

그것은 쉼표가 있어야합니다

Uncaught TypeError: Cannot read property 'imageSrc' of undefined 

사람 : 마지막에 그렇게 ddslick 드롭 기능이 imageSrc하고 드롭 다운에 사용할 수있는 다른 것들을 무시, 기타는이 오류가 발생합니다 모든 것을 함께 묶어, 내가 가진 :

var tags = []; 

var getTopTracks = function() { 
    $.getJSON(
    settings.PHP_REQUEST_URL, { 
     method: "tag.getTopTags", 
     api_key: settings.LASTFM_APIKEY, 
     format: "json", 
    }, 

    function (data) { 
     var limit = 50; 

     data.toptags.tag.sort(function (t1, t2) { 
      return t2.count - t1.count; 
     }); 

     $.each(data.toptags.tag, function (i, item) { 
      if (i > limit) return false; 
      console.log(item.name); 
      tags.push({ 
       text: item.name, 
       value: item.name 
      }); 
     }); 
    }); 
}; 

// event handlers (load quando o form é invocado só) 
getTopTracks(); 
alert(tags.length); 

// define tema para a combobox 
$('#tag').ddslick({ 
    data: tags, 
    onSelected: function (selectedData) {} 
}); 

가 어떻게이 작업을 수행 할 수 있습니다

$('#tag').ddslick({ 
    data: tags, 
    onSelected: function(selectedData) {} 
}); 

이 태그를 얻는 기능은 무엇입니까? 당신이 tags$.getJSON()로 작성되지 매우 가능성 경고를 사용하는 시점에서

+0

당신은 쉼표와 함께 잘 작동 말을하는지? 그게 어떻게 달라질 지 모르겠습니다. – sachleen

+0

오 ... 분명히 그것은 쉼표가 아니 었습니다, 그것은 내 배열에 뭔가 있어요. 'tags.push ({ "text": item.name, "value": item.name});로 값을 푸시합니다. '- 올바른 구문입니까? 푸시 후 길이가 0으로 표시되어 무엇이 잘못되었는지 궁금합니다. – swiftcode

+0

콘솔에서 오류를 확인하십시오 ... '항목'이 정의 되었습니까? – sachleen

답변

2
var tags = []; //initialised tags with length 0 
getTopTracks(); //fetching date in background (!) 
alert(tags.length); //running while data is still fitched (unless you've a 0ping connection => alerting length 0 

는 요청이 계속 스크립트의 배경과 실행에서 처리됩니다 의미 요청 asynchronus 입니다. 배열을 채우기 위해 이미 수행 한 것처럼 콜백 메서드를 사용해야합니다.

This, getJSON, is a shorthand Ajax function, which is equivalent to: 
$.ajax({ 
    url: url, 
    dataType: 'json', 
    data: data, 
    success: callback 
}); 

http://api.jquery.com/jQuery.getJSON/

//getJSON success callback: 
function (data) { 
    var limit = 50; 

    data.toptags.tag.sort(function (t1, t2) { 
     return t2.count - t1.count; 
    }); 

    $.each(data.toptags.tag, function (i, item) { 
     if (i > limit) return false; 
     console.log(item.name); 
     tags.push({ 
      text: item.name, 
      value: item.name 
     }); 
    }); 
    //alert the length AFTER the tags been pushed 
    alert(tags.length); 

    // define tema para a combobox 
    $('#tag').ddslick({ 
     data: tags, 
     onSelected: function (selectedData) {} 
    }); 
} 
+0

와우, 페이지로드시에 이렇게하기 때문에 호출하기 전에 요소를로드합니다. 완료 될 때까지 어떻게 기다려야합니까? – swiftcode

+0

'$ .each' 다음에 코드를 콜백 메소드로 옮긴다. 배열이 채워진 후에 실행되도록하십시오. – yoshi

+0

고마워요,이게 내 문제를 해결했습니다! – swiftcode

관련 문제