2013-06-23 56 views
0

我有3個使用JSONP嵌套的$ .ajax調用,第一個$ .ajax調用在函數中工作,但第三個調用失敗回來給我這個錯誤:Uncaught TypeError: Property 'insertFilmData' of object [object Object] is not a functionJSONP回調錯誤:對象[object對象]的屬性'insertFilmData'不是函數

CODE:

function searchFilms(film, settings) { 
if (film === '') { 
    console.log("enter a movie"); 
} else { 
    $.ajax({ 
     type: 'GET', 
     url: 'http://api.themoviedb.org/3/configuration?api_key=XXX', 
     async: false, 
     jsonpCallback: 'getSearchResults', 
     contentType: 'application/json', 
     dataType: 'jsonp', 
     success: function(json) { 
      if (json.images) { 
       settings.imageData = json.images; 
       getSearchResults(json, settings); 
      } 
     } 
    }); 

    function getSearchResults(data, settings) { 
     $.ajax({ 
      type: 'GET', 
      url: 'http://api.themoviedb.org/3/search/movie?api_key=XXX&query=' + film, 
      async: false, 
      jsonpCallback: 'deliverResults', 
      contentType: 'application/json', 
      dataType: 'jsonp', 
      success: function(json) { 
       if (json.total_results !== 0) { 
        deliverResults(json, settings); 
       } 
      } 
     }); 

     function deliverResults(data, settings) { 
      var results = data.results; 
      var html = "<ul id='film-search-results' data-role='listview' data-inset='true'>"; 
      for (var i = 0; i < results.length; i++) { 
       var result = results[i]; 
       var filmId = result.id; 
       $.ajax({ 
        type: 'GET', 
        url: 'http://api.themoviedb.org/3/movie/' + filmId + '?api_key=XXX&append_to_response=' + settings.extras, 
        async: false, 
        jsonpCallback: 'insertFilmData', 
        contentType: 'application/json', 
        dataType: 'jsonp', 
        success: function(json) { 
         if (json) { 
          settings.html = html; 
          insertFilmData(json, settings); 
         } 
        } 
       }); 

       function insertFilmData(data, settings) { 
        var poster_base_url = settings.imageData.base_url; 
        var poster_size = settings.imageData.poster_sizes[0]; 
        var poster_filepath = data.poster_path; 
        var poster_url = poster_base_url + poster_size + "/" + poster_filepath; 
        var html = settings.html + "<li><img src='" + poster_url + "' alt='Poster' /><a class='ui-link-inherit'><h3 class='ui-li-heading'>" + data.title + "</h3><p class='ui-li-desc'><strong>" + data.tagline + "</strong></p><p class='ui-li-desc'>" + data.overview + "</p></a></li>"; 

       } 
      } 
      html = html + "</ul>"; 
      console.log(html); 
      $('#content-add-title').html(html); 
      $('#film-search-results').trigger("create"); 
     } 
    } 
} 
} 

我是很新,使用JSONP跨域調用,所以我不知道發生了什麼錯誤看到,因爲前兩個回調火這只是最後一個沒有的。任何幫助或方向將不勝感激。謝謝

回答

0

它正在尋找一種名爲insertFilmData並找不到它的方法。

  $.ajax({ 
       type: 'GET', 
       url: 'http://api.themoviedb.org/3/movie/' + filmId + '?api_key=XXX&append_to_response=' + settings.extras, 
       async: false, 
       jsonpCallback: 'insertFilmData', 
       contentType: 'application/json', 
       dataType: 'jsonp', 
       success: function(json) { 
        if (json) { 
         settings.html = html; 
         insertFilmData(json, settings); 
        } 
       }, 
       insertFilmData: function(data, settings) { 
        var poster_base_url = settings.imageData.base_url; 
        var poster_size = settings.imageData.poster_sizes[0]; 
        var poster_filepath = data.poster_path; 
        var poster_url = poster_base_url + poster_size + "/" + poster_filepath; 
        var html = settings.html + "<li><img src='" + poster_url + "' alt='Poster' /><a class='ui-link-inherit'><h3 class='ui-li-heading'>" + data.title + "</h3><p class='ui-li-desc'><strong>" + data.tagline + "</strong></p><p class='ui-li-desc'>" + data.overview + "</p></a></li>"; 

       } 

      }); 

或者,你可以只保留它,因爲它是現在,但更改行:大概,如果你定義函數爲對象的方法,這是對AJAX調用的參數,即它會工作jsonpCallback: 'insertFilmData',jsonpCallback: insertFilmData,。這將意味着ajax調用的參數之一將是函數本身,而不是函數的名稱。 (如果我正確理解這一點,函數定義低於此行並不重要,因爲它是一個命名函數,它在範圍內。)

+0

我嘗試了兩種建議都無效。你的第二個建議稱爲jsonp回調,但回調的參數在函數內部是未定義的。不知道如何將json從$ .ajax調用和設置對象傳遞給回調 – Joe

+0

我想這是一個單獨的問題。嗯......我可以看到這個代碼錯誤的唯一的東西是'async:false'部分。來自'async'的jQuery文檔:「跨域請求和數據類型:」jsonp「請求不支持同步操作。」我希望jQuery會拋出一個錯誤,但顯然不是。試着改變它,看看會發生什麼。 (這是一個瘋狂的猜測,但你應該改變它。) –

相關問題