[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: AJAX, PERL, запись в файл и неожиданный ответ от с
Jops
Здравствуйте уважаемые!
Ситуация такова. Есть кнопка (выполняет функцию обновления файла конфигурации списка устройств).
Значит, жмём, вылетает окно (плагин 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


Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.