我使用以下代码来确定m3u8 URL是否已损坏。我使用两个不同的URL进行测试,一个在线,一个在线。对于这两种情况,我的javascript函数不会提醒我文件是否被找到而firefox调试不会给我任何错误,但状态变量总是显示0.有人能告诉我我在做错了吗?
编辑:
for offline url i get this header response(in httpfox developer tool) :HTTP/1.1 404 Not Found
for online url i get this header response(in httpfox developer tool) :HTTP/1.1 200 OK
代码:
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
function testFunction() {
//m="http://someothersite.com/offline.m3u8";
m="http://somesite.com/workingfile.m3u8";
//now we checking if the file exist
UrlExists(m, function(status){
alert('status:'+status);
if(status === 200){
// file was found
alert('file found'+m);
}
else if(status === 404){
// 404 not found
alert('file not found'+m);
}
});
function UrlExists(url, cb){
jQuery.ajax({
url: url,
dataType: 'text',
type: 'GET',
complete: function(xhr){
alert(+xhr.status);
if(typeof cb === 'function')
cb.apply(this, [xhr.status]);
}
});
}
}// end of main
</script>
</head>
<body>
<button onclick="testFunction()">Click me</button>
</html>
答案 0 :(得分:2)
如果您使用外部网址,这将无效,因为CORS(跨域资源共享)将启动并因您不在同一个域中而阻止您。
工作版本:仅限本地文件
UrlExists('/path/file.php', function(status){
if(status === 200){
alert('file found');
}
else if(status === 404){
alert('file not found');
}
});
不幸的是,通过Javascript没有一种有效的方法。但是,您可以通过后端功能执行此操作,例如PHP
$file = 'http://www.othername.com/somefile.jpg';
$file_headers = @get_headers($file);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
$exists = false;
}
else {
$exists = true;
}
如果你将它构建成一个php函数,然后使用你的Ajax功能将URL传递给PHP进行验证,然后返回一个响应 - 它应该可以工作。
编辑:卷曲示例
$mainUrl = curl_init($url);
curl_setopt($mainUrl, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($mainUrl);
$httpCode = curl_getinfo($mainUrl, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
echo "404 Error";
}else if($httpCode == 200){
echo "200 Error";
}else{
echo "all good - sort off...";
}
curl_close($mainUrl);
这是Curl选项 - 现在我的方式(我真的必须这样做......)循环遍历页面上的每个URL(以js为单位)并将其作为对象发送到PHP(通过Ajax)。使用PHP,我将使用上面的CURL功能来确认哪些被破坏(使用1或0),然后发回一个响应。