最新更新:
嗨Dashron,
我一直在做一些独立的研究和我所看到的是,支持jQuery Ajax的所有其他视频API即JSONP将在API调用期间提供以下文件:
crossdomain.xml,基本上看起来像这样:
<cross-domain-policy>
<allow-access-from domain="*" />
<allow-http-request-headers-from domain="*" headers="*" />
<site-control permitted-cross-domain-policies="master-only" />
</cross-domain-policy>
这是CORS的核心。 我从YouTube,SoundCloud和DailyMotion获取此文件。
但是,当使用fiddler实用程序根据您的建议调试Vimeo API测试时,此文件永远不会出现在流量交换中。
此外,如果我将Ajax调用类型更改为仅JSON(无JSONP),我会收到302响应,指示重定向,但会根据您的说明显示接受标头。显然JSONP是必需的,或者客户端API没用,但这让我相信你的API团队有:
一个。没有测试jQuery AJAX和; B.未启用CORS
我希望这可以帮助您获得符合jQuery Ajax JSONP流量的API v.3.0 CORS。
谢谢,
莱恩
原创信息:
我正在尝试使用jQuery Ajax来执行简单的视频搜索。
根据Vimeo API支持,新的beta api版本3支持此功能:
从他们发给我的电子邮件中摘录:
好消息是,API3将支持此功能。它目前处于测试阶段,但我们有很多人在生产应用中使用它。您可以在https://developer.vimeo.com/apps/new?oauth2=enabled创建新应用,或者在应用编辑页面末尾添加“?oauth2 = enabled”,在应用上启用该应用。 您可以在developer.vimeo.com/api/docs找到非常早期的文档。
只要您在请求中未包含应用程序秘密,一切都应该正常。 如果您遇到任何问题,请告诉我! END EXCERPT
我尝试使用以下代码执行此操作失败:
var urlX ='http://api.vimeo.com/videos?query=elvis';
$.ajax({
url: urlX,
type: "GET",
beforeSend: function (req) {
req.setRequestHeader("Vimeo-Client-ID", "<My API Key>");
req.setRequestHeader('Content-type', 'application/xml; charset=UTF-8');
},
dataType: "jsonp",
success: function (data) {
alert("SUCCESS");
},
error: function (xhr, ajaxOptions, thrownError) {
alert("Error: " + thrownError);
}
});
}
我通过参考以下规范来构建它:
https://developer.vimeo.com/api/docs/spec
这不起作用。任何人都可以提供帮助,因为它已经过了3天而没有来自Vimeo API支持的任何进一步回复。
谢谢!
更新:
我尝试过这个并不起作用。请提供示例代码以节省时间。非常感谢!!
感谢您的回复。不幸的是,这不起作用:
urlX ='http://api.vimeo.com/videos?query=elvis&client_id=XXXXXXXX';
$.ajax({
url: urlX,
type: "GET",
beforeSend: function (req) {
req.setRequestHeader('Accept', 'application/vnd.vimeo.*+json;version=3.0');
},
dataType: "jsonp",
success: function (data) {
alert("SUCCESS");
},
error: function (xhr, ajaxOptions, thrownError) {
alert("Error: " + thrownError);
}
});
我也尝试了这个不可多得...... :((
urlX ='http://api.vimeo.com/videos?query=elvis&client_id=XXXXXXXX';
$.ajax({
url: urlX,
type: "GET",
headers {
"Accept": "application/vnd.vimeo.*+json;version=3.0"
},
dataType: "jsonp",
success: function (data) {
alert("SUCCESS");
},
error: function (xhr, ajaxOptions, thrownError) {
alert("Error: " + thrownError);
}
});
我也尝试了这个失败:
$.ajax({
url: urlX,
type: "GET",
headers {
"Content-Type": "application/vnd.vimeo.*+json;version=3.0"
},
dataType: "jsonp",
success: function (data) {
alert("SUCCESS");
},
error: function (xhr, ajaxOptions, thrownError) {
alert("Error: " + thrownError);
}
});
最后我按照以下StackOverflow文章尝试了这个: Cannot properly set the Accept HTTP header with jQuery
$.ajax({
url: urlX,
type: "GET",
headers {
Accept: "application/vnd.vimeo.*+json;version=3.0",
"Content-Type": "application/vnd.vimeo.*+json;version=3.0"
},
dataType: "jsonp",
success: function (data) {
alert("SUCCESS");
},
error: function (xhr, ajaxOptions, thrownError) {
alert("Error: " + thrownError);
}
});
如果没有任何特定的错误消息,我无法推断出解决方案,如果提供了一个工作示例,我将非常感激。我相信它可以帮助其他使用v3.0 API的jQuery开发人员。
谢谢!
更新 - 看起来像是跨域安全问题
我的一位开发人员看了一眼,并建议由于json经历了但不是jsonp,因此有一个“CORS”iissue;换句话说,根据收到的错误,您的API不允许跨域请求:
错误:未调用jQuery18305652002056594938_1376096997218
我认为你们绝对应该从 vimeo.com以外的域名测试这个,因为我们可以回去看看永远存在但如果不支持跨域调用,那么我的编码量不会影响到这一点。这是您的员工的一项工作,以启用跨域请求。
urlX = 'http://api.vimeo.com/videos?query=elvis&client_id=d0b4a83fc5c12570e9270fc54ef6ecabb8675fcf';
$.ajax({
url: urlX,
type: "GET",
beforeSend: function (req) {
req.setRequestHeader('Accept', 'application/vnd.vimeo.*+json;version=3.0');
},
dataType: "jsonp",
success: function (data) {
alert("SUCCESS");
},
error: function (xhr, ajaxOptions, thrownError) {
$("#errorMsg").text(thrownError);
}
});
}
谢谢,
莱恩
答案 0 :(得分:1)
感谢Vimeo的支持,我终于能够获得一份工作样本。我的错误是假设JSONP是必需的,即使它不是。由于Vimeo在其API的3.0版本中启用了CORS,因此jQuery getJSON()函数将在跨域工作。
这是一份工作样本。希望这可以节省一些时间和精力。
function TestVimeo() {
urlX = 'https://api.vimeo.com/videos?query=elvis&client_id=XXXXXXXXXXXXXX';
$.getJSON(urlX, function (data) { console.log(data); })
.success(function (payload) {
console.log("second success");
})
.error(function (jqXHR, textStatus, errorThrown) {
console.log('******* ' + "error: " + textStatus + ' *******');
});
}
答案 1 :(得分:0)
看起来规格已经过时了。
不再遵守Vimeo-Client-ID标头。 您需要做的就是将您的客户端ID作为查询字符串参数添加到URL。
http://api.vimeo.com/videos?query=elvis&client_id=XXXXXXXXX
此外,您需要提供文档中所述的正确接受标头Accept: application/vnd.vimeo.*+json;version=3.0