AJAX请求无法读取更新的会话/全局变量

时间:2016-02-20 13:53:05

标签: javascript jquery python ajax flask

我正在使用带有google-python-api-client的Flask从Youtube获取数据。

我正在尝试按下按钮时从播放列表中异步加载下一个视频。为此,我需要在发出请求时设置nextPageToken参数

    $(document).ready(function() {
        $('#more_content').click(function() {
            $.ajax({
                type: "GET",
                url: "/test",
                data: {np_token: '{{ g.np_token }}'},
                success: function(result) {
                    $("#content").append(result);
                }
            });
        });
    });

我用来获取下一个视频的功能:

def get_another_video():
    res = YOUTUBE.playlistItems().list(
        part="snippet",
        playlistId=PLAYLIST_ID,
        maxResults="1",
        pageToken=request.args.get('np_token', None)
    ).execute()
    g.np_token = res.get('nextPageToken', None)
    return json.dumps(res)

这不起作用,因为AJAX请求无法从全局变量g.np_token读取更新的值,如果我将设置会话变量,结果也会相同。

我该如何解决这个问题?传递给AJAX的参数仅在success请求的情况下可用,但我需要在data部分访问它们。

我已经读过,对于这种任务,redis或memcache可能是合适的,但我不知道我是否能够访问模板中的那些变量。 谢谢!

2 个答案:

答案 0 :(得分:2)

似乎没有任何理由为您的令牌使用全局变量 - 或任何单独的变量。它会从YouTube API传回,然后您将整个响应传递给您的模板。您可以在JS函数中从中获取它并在下次调用时使用该值。

var token;
$('#more_content').click(function() {
    $.ajax({
        type: "GET",
        url: "/test",
        data: {np_token: token},
        success: function(result) {
            token = result['nextPageToken'];
            $("#content").append(result);
        }
    });

答案 1 :(得分:1)

如果你要在success部分更新g.np_token怎么办?

像这样:

var np_token = null; 

function ajaxCallBack(token){
    np_token = token;
}
$.ajax({
    type: "GET",
    url: "/test",
    data: {np_token: '{{ g.np_token }}'},
    success: function(result) {
        $("#content").append(result);
        ajaxCallBack(response['token']);
    }
});