虽然请求与jQuery getJSON一起正常工作,但回调没有被执行

时间:2009-10-14 15:31:48

标签: jquery jsonp getjson

我正在使用免费的obtain a list of assets帐户在广告素材中尝试drop.io(通过JSON)。

请注意,我已经查看了有关此问题的其他两个问题(question1question2),但这两个问题都没有提供解决方案。

    var dropName = escape("greganddonny");
            var apiKey = "some key I'm not displaying it here...";
            var version = "2.0";

    var assetsListBaseURL = "http://api.drop.io/drops/greganddonny/assets.json?api_key=" + apiKey + "&version=" + version;

    var resultingdata = null;

    function getFileList() {
        console.log("BEGIN: getFileList()");
        var surl = assetsListBaseURL + '&callback=?';

        $.getJSON(surl, function(data, textStatus) {
            console.log("textStatus:" + textStatus);
            console.log("BEGIN: Callback()");
            resultingdata = data;
            showResult();
            console.log("END: Callback()"); 
    });

        console.log("END: getFileList()");
    }

    function showResult()
    {
        alert(resultingdata);
    }

    $(document).ready(function() {
        console.log("BEGIN: document.ready");
            $.ajaxSetup({
            "error": function(XMLHttpRequest,textStatus, errorThrown) {   
              alert(textStatus);
              alert(errorThrown);
              alert(XMLHttpRequest.responseText);
              }
            })

            $("#search").click(function() {getFileList();});
        console.log("END: document.ready");
    });

单击页面上的搜索按钮时,将触发getFileList()函数。根据我的firebug控制台,getFileList()函数被调用就好了。

JSON请求也成功,因为当我在drop.io的站点上调用assets.json时,firebug控制台的Net选项卡显示200OK状态。我还在“网络”选项卡的请求列表中收到以下返回JSON:

    [{"converted":"http:\/\/drop.io\/download\/public\/x0yfnmzdtet1vtxesqcm\/12a9ebc74c9a3e4e3b2e2b4ea3546b919a2519ff\/df43d2b0-926f-012c-26c2-fbe072d62af6\/2a0a5270-9270-012c-8fc9-fbfd417303a8\/v2\/content","type":"audio","status":"converted","title":"MikeAndAndyOnPhone2009.MP3","duration":118,"artist":"Unknown","created_at":"2009/10/03 17:29:02 +0000","filesize":1895424,"description":null,"track_title":"Unknown","hidden_url":"http:\/\/drop.io\/hidden\/sazpcf7522exzb\/asset\/bWlrZWFuZGFuZHlvbnBob25lMjAwOS1tcDM=","name":"mikeandandyonphone2009-mp3"}]

我使用JSONLint验证了上面返回的JSON块,它报告返回的JSON确实有效,你可以通过复制和粘贴上面的块来测试它。

我已经尝试了所有我知道如何尝试,我甚至为$ .ajaxSetup方法添加了一个“错误”选项,我仍然没有成功返回甚至错误消息,为什么我的回调函数没有被召唤。

知道为什么会这样吗?您可以测试我的脚本here

1 个答案:

答案 0 :(得分:2)

JSONP要求服务器支持JSONP请求。但是,如果你访问

http://api.drop.io/drops/greganddonny/assets.json?api_key=API_KEY_HERE&version=2.0&callback=x

返回的文档看起来像[{"converted..),但由于x([{"converted"..)回调,它应该看起来像x

显然 drop.io 不支持JSONP(文档也没有说明)。唯一的选择是跨域js的经典方法:Use a Proxy