$ .ajax jsonp回调函数的工作

时间:2015-09-15 13:57:06

标签: javascript jquery json ajax callback

我正在使用http://www.myapifilms.com/imdb/inTheaters来获取数据。这是从下面的代码生成的query

function sendRequest() {
    var parms = "format=JSONP";

    // Other parameters
    //parms += "&lang=en-us&actors=S";

    $("#countries").text("");
    $("#actors").text("");

    $.ajax({
        data:       parms,
        url:        'http://www.myapifilms.com/imdb/inTheatres',
        type:       'get',
        dataType:   'jsonp',
        beforeSend: function () {alert(this.url);},


        success:  function (response, textStatus, jqXHR) {
            $.each(response, function(index, element){

                if (element.directors != undefined) {
                    $.each(element.directors, function(index, director){
                        $("#directors").append(director.name + ", ");
                    });
                }
                if (element.title != undefined) {
                    $.each(element.title, function(index, title){
                        $("#movies").append(title + ", ");
                    });
                }
            });
        },
        error: function(jqXHR, textStatus, errorThrown) {
            $("#error").text(textStatus + "; " + errorThrown);
        }
    });
}

这里的问题是我得到了“ parsererror;错误:jQuery1113009284638670545353_1442120413250未被调用。”

我只是在参数中传递值,并且可以看到这很好http://www.myapifilms.com/imdb?callback=jQuery21308063971860152206_1442321554390&format=JSONP&_=1442321554392&title=matrix。但是这http://www.myapifilms.com/imdb/inTheaters?callback=jQuery21308063971860152206_1442321554390&format=JSONP&_=1442321554392&title=matrix 没有。

从后一个查询中可以看出,应用程序看起来像是返回默认回调“myapifilms”。那么如何在ajax请求中使用该默认回调来访问它拥有的数据呢?请帮助我实现同样的目标。提前致谢。

找到我在这里工作| http://codepen.io/anon/pen/YywLop

2 个答案:

答案 0 :(得分:0)

我猜你可以创建一个名为myapifilms的本地函数来处理响应。

这样的东西,它应该自动被调用。

 function myapifilms(response) {
     $.each(response, function(index, element){
        if (element.directors != undefined) {
            $.each(element.directors, function(index, director){
                $("#directors").append(director.name + ", ");
            });
        }
        if (element.title != undefined) {
            $.each(element.title, function(index, title){
                $("#movies").append(title + ", ");
            });
        }
    });
}

答案 1 :(得分:0)

怎么说@Jaromanda X,这是一个bug。在任何情况下,您的代码的网址都是错误的,您有 inTheat re s 并且 inTheat er s (" re"" er")之间的不匹配。我测试了这段代码并且有效:

function submit() {
    var url = "http://www.myapifilms.com/imdb/inTheaters";

    $.ajax({
       data:      'format=JSONP',
       url:       url,
       dataType:  'jsonp',
       jsonpCallback: "myapifilms",
       success:   function (response, textStatus, jqXHR) {
            $.each(response, function(index, element){

                if (element.directors != undefined) {
                    $.each(element.directors, function(index, director){
                        $("#results").append(director.name + ", ");
                    });
                }
            });
       },
        error: function(jqXHR, textStatus, errorThrown) {
            $("#error").text(textStatus + "; " + errorThrown);
        }
    });
}

function myapifilms(response) {
     $.each(response, function(index, element){
        if (element.directors != undefined) {
            $.each(element.directors, function(index, director){
                $("#results").append(director.name + ", ");
            });
        }
    });
}

P.S。:我是网站的创建者,我建议您迁移到版本2.

修改

第2版中的呼叫示例:

function submit() {
    var url = "http://www.myapifilms.com/imdb/inTheaters";
    var params = {
        token: 'YOUR_TOKEN',
        format: 'json',
        callback: 'myapifilms'
    };

    $.ajax({
        url : url,
        data : params,
        type : 'get',
        dataType : 'jsonp',
        jsonpCallback: 'myapifilms'
    });
}

function myapifilms(json) {
    alert(json.data.inTheaters[0].openingThisWeek);
}

" json"变量你有所有的信息。