2013-08-26 39 views
-4

其我的代碼編輯圖像src與輸出從JSON請求一切工作之前返回但是當我寫代碼返回輸出其獲取錯誤,不要更改圖像src。attr函數在jquery

$(function(){ 
$(".plimg").attr(
"src", 
function(index){ 
track = '212'; 
artist = 'azealea banks'; 
$.getJSON("http://ws.audioscrobbler.com/2.0/?method=track.search", 
     { 
      track: track, 
      artist: artist, 
      api_key: "ca86a16ce762065a423e20381ccfcdf0", 
      format: "json", 
      lang: "en", 
      limit: 1  }, 
function(data) { 
var output = data.results.trackmatches.track.image[0]["#text"]; 
}); 

    return output; 

} 
); 

}); 
+0

步驟1:格式您的代碼清晰可辨。 –

+0

你也應該嘗試替代attr –

+0

,你正在做'ajax'請求,它是'async',但是試着立即使用'output'變量。這是行不通的,你必須在'$ .getJSON'的回調中分配'src'屬性。 –

回答

1

另一種方式來做到這一點是通過使AJAX調用同步

$(function() { 
    $(".plimg").attr("src", 

    function (index) { 
     track = '212'; 
     artist = 'azealea banks'; 

     var output; 

     $.ajax({ //instead of getJSON as the function does not allow configurations. 
      url: "http://ws.audioscrobbler.com/2.0/?method=track.search", 
      data: { 
       track: track, 
       artist: artist, 
       api_key: "ca86a16ce762065a423e20381ccfcdf0", 
       format: "json", 
       lang: "en", 
       limit: 1 
      }, 
      async: false, //making the call synchronous 
      dataType: 'json', //specifying JSON type 
      success: function (data) { 
       output = data.results.trackmatches.track.image[0]["#text"]; 
      } 

     }); 
     return output; 
    }); 
}); 
5

這是因爲$.getJSON是異步的,所以attr回調總是作爲屬性值返回undefined。

該解決方案將第一和在其回調發送AJAX請求設置的屬性值

$(function() { 

    var track = '212'; 
    var artist = 'azealea banks'; 
    $.getJSON("http://ws.audioscrobbler.com/2.0/?method=track.search", { 
     track : track, 
     artist : artist, 
     api_key : "ca86a16ce762065a423e20381ccfcdf0", 
     format : "json", 
     lang : "en", 
     limit : 1 
    }, function(data) { 
     var output = data.results.trackmatches.track.image[0]["#text"]; 
     $(".plimg").attr("src", output); 
    }); 
});