我正在使用带有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可能是合适的,但我不知道我是否能够访问模板中的那些变量。 谢谢!
答案 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']);
}
});