2013-03-03 147 views
0

如果我有這樣的功能,我傳遞一個movieid變量。處理多個JSON對象

function getFilmDetails(movieid) { 
    var filmDetails = 0; 


    $.ajax({ 

     dataType: "json", 
     type: 'get', 
     mimeType: "textPlain", 
     url: 'http://api.themoviedb.org/3/movie/' + movieid, 
     async: false, 
     success: function(result){ 

      if(result.popularity > 10000) { 
       result.popularity = 10000; 
      } 
      if(result.popularity < 0.1) { 
       result.popularity = 0.1; 
      } 

      filmDetails = result; 
     } 
    }); 

    return filmDetails; 
} 

我打電話給100多部電影的細節通過這個函數,正如你可以想象的那樣,這樣做需要永久加載頁面。我需要輕鬆訪問每部電影的JSON值。例如:

alert(getFilmDetails(12345).description); 
alert(getFilmDetails(65432).popularity); 
alert(getFilmDetails(12345).tagline); 

有沒有更好的方法來做到這一點?

+1

使用了'異步:假;'...爲什麼?讓你的功能接受回調。 'getFilmDetails(12345,function(data){alert(data);})'然後在你的函數中,'filmDetails = result;'的位置,調用回調函數,並將'result'傳遞給''callback(result) ;' – 2013-03-03 16:59:17

+0

你不應該從單個頁面發送超過100個Ajax(並且都不是100個sjax)請求 – Bergi 2013-03-03 17:00:51

回答

1
// receive a callback------------v 
function getFilmDetails(movieid, callback) { 
    var filmDetails = 0; 
    $.ajax({ 
     dataType: "json", 
     type: 'get', 
     mimeType: "textPlain", 
     url: 'http://api.themoviedb.org/3/movie/' + movieid, 
//  async: false, // YUCK! Commented out 

     success: function(result){ 

      if(result.popularity > 10000) { 
       result.popularity = 10000; 
      } 
      if(result.popularity < 0.1) { 
       result.popularity = 0.1; 
      } 
      callback(result) // invoke your callback 
    }); 
    return filmDetails; 
} 

// make a callback 
function workWithData(data) { 
    alert(data.description); 
} 

    // pass the callback 
getFilmDetails(12345, workWithData); 
+0

有沒有什麼辦法可以將回調數據傳遞到包含多個結果集的數組中。上面的代碼有效,但如果我嘗試將其推入數組中,則在函數外部調用時不會返回該值。 – AntonCooper 2013-03-03 18:33:29

+1

@AntonCooper:最重要的是擺脫希望事情將以簡單,同步的順序發生。解決這些異步問題的方法是找到創造性的方式來實現你想要的。例如,如果你知道你要發出100個請求,並且你希望你的回調在最後一次請求完成後做一些特殊的事情,你可以維護一個等於你正在創建的請求數的計數器,然後每個回調減少計數器。當計數器達到'0'時,您知道最後的響應回來了,以便回調可以與完整的數據陣列一起使用。 – 2013-03-03 18:51:36

+0

@thesystem可能是我問了一些有趣的,但我只是好奇,問爲什麼你添加一個回調?僅僅是因爲你想訪問JSON格式的數據? – Peeyush 2013-03-05 14:42:23