最新更新:
嗨达什伦,
我一直在做一些独立的研究,我看到的是支持 jQuery Ajax 即 JSONP 的所有其他视频 API 将在 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 团队有:
A. 未测试 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 找到非常早期的文档。
只要您的请求中没有包含您的应用程序密码,一切都应该可以正常工作。如果您遇到任何问题,请告诉我! 结束摘录
我尝试使用以下代码未成功执行此操作:
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 proper 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);
}
});
}
谢谢,
伦