Javascript JSONP回调错误:属性';插入FilmData';对象的属性[object object]不是函数

Javascript JSONP回调错误:属性';插入FilmData';对象的属性[object object]不是函数,javascript,jquery,ajax,json,jsonp,Javascript,Jquery,Ajax,Json,Jsonp,我使用JSONP进行了3个嵌套的$.ajax调用,第一个$.ajax调用在函数中工作,但第三个未能执行回调,这给了我一个错误:Uncaught TypeError:object[object object]的属性'insertFilmData'不是函数 代码: 功能搜索胶片(胶片、设置){ 如果(胶片==''){ console.log(“输入电影”); }否则{ $.ajax({ 键入:“GET”, 网址:'http://api.themoviedb.org/3/configuration?a

我使用JSONP进行了3个嵌套的$.ajax调用,第一个$.ajax调用在函数中工作,但第三个未能执行回调,这给了我一个错误:
Uncaught TypeError:object[object object]的属性'insertFilmData'不是函数

代码:

功能搜索胶片(胶片、设置){
如果(胶片==''){
console.log(“输入电影”);
}否则{
$.ajax({
键入:“GET”,
网址:'http://api.themoviedb.org/3/configuration?api_key=XXX',
async:false,
jsonpCallback:'getSearchResults',
contentType:'应用程序/json',
数据类型:“jsonp”,
成功:函数(json){
if(json.images){
settings.imageData=json.images;
getSearchResults(json,设置);
}
}
});
函数getSearchResults(数据、设置){
$.ajax({
键入:“GET”,
网址:'http://api.themoviedb.org/3/search/movie?api_key=XXX&query="电影,,
async:false,
jsonpCallback:'deliverResults',
contentType:'应用程序/json',
数据类型:“jsonp”,
成功:函数(json){
if(json.total_results!==0){
deliverResults(json、设置);
}
}
});
函数交付结果(数据、设置){
var结果=data.results;
var html=“
    ”; 对于(var i=0;i”+data.title+“

    “+data.tagline+”

    “+data.overview+”

  • ”; } } html=html+“
”; log(html); $('#内容添加标题').html(html); $(“#电影搜索结果”).trigger(“创建”); } } } }

我对使用JSONP进行跨域调用还很陌生,所以我不确定前两次回调发生了什么问题,只有最后一次没有。任何帮助或指导都将不胜感激。谢谢

它正在寻找名为
insertFilmData
的方法,但找不到它。如果您将函数定义为对象的一个方法(该方法是ajax调用的一个参数),那么它可能会起作用,即:

            $.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({
键入:“GET”,
网址:'http://api.themoviedb.org/3/movie/“+filmId+”?api_key=XXX&将_附加到_response='+settings.extras,
async:false,
jsonpCallback:'insertFilmData',
contentType:'应用程序/json',
数据类型:“jsonp”,
成功:函数(json){
if(json){
settings.html=html;
插入FilmData(json,设置);
}
},
insertFilmData:功能(数据、设置){
var poster_base_url=settings.imageData.base_url;
var poster_size=settings.imageData.poster_size[0];
var poster_filepath=data.poster_path;
var poster_url=poster_base_url+poster_size+“/”+poster_文件路径;
var html=settings.html+“
  • ”+data.title+“

    “+data.tagline+”

    “+data.overview+”

  • ”; } });

  • 或者,您可以保持原样,但将行
    jsonpCallback:“insertFilmData”
    更改为
    jsonpCallback:insertFilmData,
    。这意味着ajax调用的参数之一是函数本身,而不是函数的名称。(如果我理解正确,函数定义是否在这一行下面并不重要,因为它是一个命名函数,并且在范围内。)

    我尝试了你的两个建议,但都无效。您的第二个建议调用了jsonp回调,但回调的参数在函数中未定义。我不确定如何将json从$.ajax调用和设置对象传递到回调,我想这是另一个问题。六羟甲基三聚氰胺六甲醚。。。这段代码唯一的错误就是
    async:false
    部分。从jQuery文档中的
    async
    :“跨域请求和数据类型:“jsonp”请求不支持同步操作。”我本希望jQuery会抛出错误,但显然不会。试着改变一下,看看会发生什么。(这是一个粗略的猜测,但无论如何你都应该改变它。)
                $.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>";
    
                    }
    
                });