获取新上传URL的AJAX请求

时间:2014-10-19 09:14:03

标签: javascript jquery ajax google-app-engine

我使用Google App Engine提供后端服务,并尝试使用AJAX帖子及其Blobstore API上传文件。我得到了那部分工作。如果您不熟悉该服务,则非常简单。 Blobstore API上传分为两个步骤:您需要获取上传网址,然后上传到该网址。

现在,我正在实施一个编辑器,medium.com-like

事情是这个插件需要上传端点。由于我的端点不是静态的,我每次都需要更新该URL,因此我在后端准备了一个API,该API使用该URL响应JSON文件。我正在尝试执行AJAX请求以获取该URL但我收到错误,因为POST请求是针对错误网址完成的。

这是POST requet:

INFO     2014-10-19 08:58:22,355 module.py:659] default: "POST /admin/%5Bobject%20Object%5D HTTP/1.1" 200 2594

这是我的Javascript代码:

function getURL(callback) {
    return $.ajax({
        type: "GET",
        url: "/admin/upload_url",
        dataType: "json",
        success: callback
    });
};

$('.editable').mediumInsert({
    editor: editor,
    addons: {
      images: {
        imagesUploadScript: getURL().done(function(json){return json['url']})
      },
      embeds: {
        oembedProxy: 'http://medium.iframe.ly/api/oembed?iframe=1'
      }
    }
});

我想我在AJAX返回时做错了,但如果我在console.log中,我得到了我想要的结果。我已阅读this answer并尝试应用它,但我没有设法让它正常运行。

感谢您的时间和帮助! :)

1 个答案:

答案 0 :(得分:0)

如果有人遇到同样的问题,这就是我解决问题的方式。如果你正在阅读这篇文章而你现在感觉更好,请感谢每一位帮助。

var url; // Set a global variable
        // Define the AJAX call 
        function AJAXURL() {
            return $.ajax({
                type: "GET",
                url: "/admin/upload_url",
                success: function(response){
                    // Sets the global variable
                    url = response['url'];
                }
            });
        };

        // Gets a first upload URL doing an AJAX call while everything keeps loading
        AJAXURL();

        $('#editable').mediumInsert({
            editor: editor,
            addons: {
                images: {
                    imagesUploadScript: function getURL() {
                        // makes a request to grab new url
                        AJAXURL();
                        // But returns the old url in the meanwhile
                        return url;
                    }
                },
                embeds: {
                    urlPlaceholder: 'YouTube or Vimeo Link to video',
                    oembedProxy: 'http://medium.iframe.ly/api/oembed?iframe=1'
                }
            }
        });