获取新上传URL的AJAX请求

An AJAX request to get the new upload URL

本文关键字:AJAX 请求 URL 获取      更新时间:2023-09-26

我正在使用Google应用引擎作为后端服务,我正在尝试使用AJAX帖子和他们的Blobstore API上传文件。我把那个部分做好了。如果你不熟悉的服务,很简单。Blobstore API上传是一个两步的过程:您需要获得一个上传url,然后上传到该url。

现在,我正在实现一个编辑器,类似media.com.

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

这是POST请求:

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,我会得到我想要的结果。我读过这个答案,并试着应用它,但我没能让它发挥作用。

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

如果有人遇到同样的问题,这就是我解决问题的方法。如果你正在阅读这篇文章,并且你现在是一个更好的人,请尽我所能。

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'
                }
            }
        });