|
Как отправить данные perl-скрипту с помощью ajax?
Строки передаются в кодировке utf8. Чтобы их раскодировать нужно отключить utf8 флаг для этой строки Encode::_utf8_off, а затем перекодировать Encode::from_to строку из utf8 в ту кодировку, которая нам нужна (в данном случае cp1251).
Функция Encode::from_to конвертирует переданную строку "на месте" из одной кодировки в другую и возвращает количество перекодированных октетов в случае успеха и undef в случае ошибки.
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
use XML::DOM;
use Data::Dumper;
use Encode;
my ( %FORM, %in );
print "Content-type: text/html; charset=windows-1251\n\n";
if( length( $ENV{ 'QUERY_STRING' } ) != 0 ) {
# разбор переданных GET-параметров
my @pairs = split( /&/, $ENV{ 'QUERY_STRING' } );
foreach ( @pairs ) {
my ( $name, $value ) = split /=/;
# Un-webify plus signs and %-encoding
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack( "C", hex( $1 ) )/eg;
# Для картинок вместо кнопок
if( $name =~ /(\w+)\.[x|y]$/ ) { $name = $1; }
if( defined $in{ $name } ) {
$in{ $name } .= ',' . $value;
} else {
$in{ "$name" } = $value;
} # End if
} # End foreach
%FORM = %in;
Encode::_utf8_off($FORM{ 'q' });
Encode::from_to($FORM{ 'q' }, 'utf-8', 'windows-1251');
#$FORM{ 'q' } = Encode::encode( 'cp1251', $FORM{ 'q' } ); # from utf8 to cp1251
print $FORM{ 'q' };
} else {
print q!
<html>
<head>
<script type="text/javascript" src="/js/jquery-1.2.6.min.js"></script>
<script type="text/javascript">
function sendForm( ) {
var dataString = $('#feedbacks_form').serialize();
$.ajax({
type: "GET",
url: "/cgi-bin/geo.pl",
data: dataString,
success: function( response ) {
$('#feedbackResponse').html( response );
$('#ajax_loading').toggleClass('hidden');
},
error: function( response ) {
$('#feedbackResponse').html( '<div class="error" id="server_error">При загрузке данных произошла ошибка. <br> Попробуйте перезагрузить страницу.<br> Если она повторится вновь, сообщите нам об этом. </div>' );
$('#ajax_loading').toggleClass('hidden');
}
});
}
$(function(){
$('#feedbacks_form').submit(function() {
sendForm();
return false;
});
});
</script>
</head>
<body>
<form method="get" id="feedbacks_form">
<input type="text" name="q" value=""/>
<input type="submit" name="submit" />
</form>
<div id="feedbackResponse"></div>
</body>
</html>
!;
}
Вернуться к списку |
В админку |