jQuery:JSON值无法正确显示

时间:2017-12-01 19:02:40

标签: jquery json

我正在建立一个“调整名称”的名字。使用iTunes API的网络应用程序。我向iTunes提交了一个搜索请求并获取了一个JSON对象。然后我存储previewURL(歌曲片段)和trackName(歌曲名称)。我使用trackName检查用户是否提交了正确的猜测,当猜测错误时我用它在UI上显示歌曲名称,以便用户知道正确的答案是什么。

问题: 1.在UI上显示歌曲名称时,它显示为[对象对象]。但是,它会正确显示在控制台上 - 即它显示歌曲名称。在我的例子中,这首歌是' backroads'。 2.检查猜测是否正确的功能不起作用。每一个猜测,即使是正确的猜测,都显示为不正确......我猜我会期待问题#1。

请参阅附件。enter image description here

我尝试过的事情:
1.搜索其他类似问题,但没有找到任何正确的问题。 2.使用a来改变变量。同样糟糕的结果。 3.将songName作为参数传递给第二个函数。

以下是有问题的JS代码。

// when user clicks Play get song preview from iTunes and play, show songguess and hide genresection
$("button#playSong").click(function(){

    $('.genreSection').hide();  
    $('#guessFields').show();

    // get genre user selected
    var genreSelected = $('input[type="radio"]:checked').val();
    console.log("Genre selected is: "+genreSelected);

    // get song for genre selected     
    $.post("https://itunes.apple.com/search?kind=song&limit=1&term="+genreSelected,                  

    // Get song preview url and define to audio source 'src' to play the song preview
    function(data){
        console.log(data);

        // get song name
        var songName = data.results[0].trackName;
        console.log("Song name is: "+songName);

        $("#songAudio").attr("src",data.results[0].previewUrl);
        $("#audioCtrl")[0].load();
        $("#audioCtrl")[0].play();
        },
    'json');  // identifies the format of the data returned
});

// when user submits guess
$("button#guessSong").click(function(songName){

        // get countdown seconds remaining

        // if countdown is less than 1, hid submit button and display message "too late"

        // get value of song guess
        var songGuess = $("#songGuess").val();
        console.log("Song guess is: "+songGuess);

    // hide input field and button
        $('#guessFields').hide();   

        // check if guess is correct
        if(songGuess === songName) {

            // increment correct guess counter
            correctGuessCounter++;
            console.log("Correct guess counter is "+correctGuessCounter);

            // display you are correct message
            $("#results").html("Correct! Your points for that guess are "+correctGuessCounter);

        }else {

            //convert songname to string
            songName = songName.toString();

            // display you are correct message
            $("#results").html("Sorry, wrong answer. The correct song name is "+songName+".");
        }

1 个答案:

答案 0 :(得分:-1)

第二次单击功能中的

songName是函数的参数。由于它是一个点击事件,songName的值将是一个事件对象,而不是一个歌曲名称。

我不确定您打算如何存储歌曲名称,但您可能希望将其存储在变量或其他内容中,超出单击函数的范围,以便它们都可以看到它。

在两个函数上方声明songName

var songName;

// when user clicks Play get song preview from iTunes and play, show 
// songguess and hide genresection
$("button#playSong").click(function(){

请务必从分配行上的var移除songName,否则它会隐藏上方的songName

   // Get song preview url and define to audio source 'src' to play the song preview
   function(data){
      console.log(data);

      // get song name
      songName = data.results[0].trackName;
      console.log("Song name is: "+songName);

确保从参数列表中删除songName,否则它也会隐藏外部列表。

// when user submits guess
$("button#guessSong").click(function(){

   ...

   // check if guess is correct
    if(songGuess === songName) {

      ...