Здравствуйте уважаемые!
Ситуация такова. Есть кнопка (выполняет функцию обновления файла конфигурации списка устройств).
Значит, жмём, вылетает окно (плагин jConfirm). Далее OK, функция reload_fls() запускается и AJAX`ом шлёт запрос (пустой. В FireBag только reloadconfig – адрес к выполняемому действию в серверном скрипте), серверный скрипт «включается», делает все свои действия (обращается к путям устройств, к БД, раскидывает нужные данные, переписывает файл).
И если всё хорошо или не хорошо, отправляет строку по форме JSON. Конец
Вот так должно быть, но, увы и ах, не работает!
А выдаёт следующее. После подтверждения OK (по кнопке), отправляет данные и сразу же в ответ получает ошибку «500».
Сразу развею сомнения по поводу сервера. С ним всё нормально, полный доступ и подобного не наблюдалось на всей разработке программы.
Ошибка в одном из этих двух действий или где-то между ними.
Если кто знает, помогите решить головоломку. Откладывал не одну неделю решение, вот так сказать и прижало сейчас.
Заранее благодарю всех, кто откликнется!
Сама функция JQuery
function reload_fls(){
jConfirm('Вы действительно хотите <b><font color="red">ОБНОВИТЬ КОНФИГ FLUSSONIC?</b></font><br /> Часть потоков может прерваться!', 'Подтверждение', function(r) {
if(r){
var cam_url = cam_control+"/cgi-bin/admin.pl?m=reloadconfig";
$.ajax({
type: 'GET',
dataType: 'json',
cache: false,
url: cam_url,
success: function(data){
if(data.error != undefined ) {
if(undefined != err_lang[data.error]) {
alert('Ошибка: '+err_lang[data.error]);
}else{
alert('Возникла неизвестная ошибка, попробуйте позже. ('+data.error+')');
}
} else {
jAlert('Конфиг успешно обновлён.','Информация');
}
},
error:function (xhr, ajaxOptions, thrownError, request, error){
alert('Возникла неизвестная ошибка, попробуйте позже. \n [ \n'+'xrs.status = ' + xhr.status + '\n' + 'thrown error = ' + thrownError + '\n' + 'xhr.statusText = ' + xhr.statusText + '\n' +
'request = ' + request + '\n' + 'error = ' + error+' \n ]');
}
});
}
});
}
Действие из серверного скрипта
Код:
|
when ("reloadconfig") {
my $url = $cfg->val( "Erly", "url");
my $user = $cfg->val( "Erly", "user");
my $pass = $cfg->val( "Erly", "pass");
my $file = $cfg->val( "Erly", "file");
my $host = $cfg->val( "Erly", "host");
#open(SLOCK, '<', $file.'.lock') or die $!; "{\"error\": \"Can't create LOCK.\"}";
open(STREAMS, '>', $file) or die "{\"error\": \"$!\"}"; #"{\"error\": \"Can't open Streams conf.\"}";
flock(STREAMS, LOCK_EX|LOCK_NB) or die "{\"error\": \"$!\"}"; #"{\"error\": \"Can't LOCK Streams conf.\"}";
my $config_str = '';
my $sth;
$sth = $dbh->prepare(q{
SELECT cam_id, cam_alias
FROM cams_list
WHERE cam_enabled = 1
ORDER BY cam_priority ASC
});
$sth->execute;
my (@row);
while( @row = $sth->fetchrow_array() ) {
my($id,$talias) = @row;
if(($talias eq '') || ($talias eq undef)) { $talias = "cam$id"; }
$config_str = $config_str . "{stream, \"$talias\", \"$host$talias\"}.\n";
}
print STREAMS $config_str;
my $curl = WWW::Curl::Easy->new;
#$curl->setopt(CURLOPT_HEADER,1);
$curl->setopt(CURLOPT_URL, $url);
$curl->setopt(CURLOPT_USERPWD, $user.':'.$pass);
# A filehandle, reference to a scalar or reference to a typeglob can be used here.
my $response_body;
$curl->setopt(CURLOPT_WRITEDATA,\$response_body);
# Starts the actual request
my $retcode = $curl->perform;
# Looking at the results...
if ($retcode == 0) {
#print("\nTransfer went ok\n");
#my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE);
# judge result and next action based on $response_code
# print "\n".$response_body;
if((trim($response_body) eq 'true') || (trim($response_body) eq 'ok')) {
print "{\"result\": \"Ok\"}";
} else {
print "{\"error\": \"Can't reload FLUSSONIC config.\"}";
}
} else {
# Error code, type of error, error message
print "{\"error\": \"Can't reload FLUSSONIC config. Is it running?\"}";
}
flock(STREAMS, LOCK_UN) or die "{\"error\": \"Can't UNLOCK FLUSSONIC conf.\"}";
} |
INI файл для серверного скрипта
Код:
|
[General]
[Erly]
file=/vlc/streams.conf
host=tshttp://127.0.0.1:6008/
url=http://10.240.230.22:8085/erlyvideo/api/reload
user=admin
pass=pass0
[DB]
dbhost=109.126.0.94
dbport=...
dbuser=...
dbpass=...
dbname=cams |