我想创建一个脚本,使每个视频的评论部分看起来像仍旧旧的那样。 例如,此频道上的视频:https://www.youtube.com/user/TheMysteryofGF/videos 在Firebug中,在Net选项卡中,我注意到请求的JSON文件的URL是不同的。 我试图在youtube手表页面上运行一个代码,它会以同样的方式请求文件,但它不起作用,并且在firebug中它说它被禁止了。 URL是相同的,它们都是POST,我无法弄清楚有什么不同。我甚至可以在firebug中重新发送原始请求并且它有效...所以无论如何,这是我用“1vptNpkysBQ”视频网址尝试的代码。
var getJSON = function(url, successHandler, errorHandler) {
var xhr = typeof XMLHttpRequest != 'undefined'
? new XMLHttpRequest()
: new ActiveXObject('Microsoft.XMLHTTP');
xhr.open('post', url, true);
xhr.onreadystatechange = function() {
var status;
var data;
// https://xhr.spec.whatwg.org/#dom-xmlhttprequest-readystate
if (xhr.readyState == 4) { // `DONE`
status = xhr.status;
if (status == 200) {
data = JSON.parse(xhr.responseText);
successHandler && successHandler(data);
} else {
errorHandler && errorHandler(status);
}
}
};
xhr.send();
};
getJSON('https://www.youtube.com/watch_fragments_ajax?v=1vptNpkysBQ&tr=time&frags=comments&spf=load', function(data) {
alert('Your public IP address is: ' + data);
}, function(status) {
alert('Something went wrong.');
});
答案 0 :(得分:0)
您正在使用Ajax获取数据。 Ajax有1个限制:您只能从自己的服务器获取数据。当您尝试从另一个服务器/域获取数据时,您将获得一个" Access-Control-Allow-Origin"错误。
任何时候在网址中输入http://(或https://),都会出现此错误。
你必须以Youtube的方式去做。
这就是他们制作javascript API的原因。这是它的工作原理(原理)。您可以使用<来自其他服务器的javascript文件。脚本>标签
所以如果你能找到一个以
开头的javascript文件var my_videos = ['foo', 'bar', 'hello', 'world'];
然后您可以在脚本中的任何位置使用var my_videos。这可以用于功能和数据。因此,服务器将此(动态生成的)脚本放在某个特定URL上。您,客户网站可以使用它。
如果你想真正理解它,你应该尝试构建自己的API;你会学到很多东西。
次要的事情:使用GET。
POST表示客户端将数据添加到服务器(例如:发表评论,上传文件,......)。 GET意味着您向服务器发送某种ID,然后服务器将自己的数据返回给客户端。
所以你在这里做的是纯粹的GET。