Вызов функции Perl в HTML с использованием AJAX - PullRequest
2 голосов
/ 20 декабря 2010

У меня есть неудача, я делаю HTML-страницу с javascript, и я использую AJAX для вызова функций Perl.Дело в том, что когда моей программе на Perl не нужны параметры, вызов тривиален.Но у меня есть функция, позволяющая открывать и читать файл, поэтому мне нужно указать местоположение файла для сценария Perl, таким образом, передавая его через параметр в вызове AJAX.Бывший рабочий вызов:

function getOption(){
   var selectmenu=document.getElementById("Select1")
    selectmenu.onchange=function(){  //run some code when "onchange" event fires
    var chosenoption=this.options[this.selectedIndex] //this refers to "selectmenu"
    if (chosenoption.value!="nothing"){
     var s = chosenoption.text;
     openFile("C:\PerlTest\test.txt");
    } 
   }
  }

EX.не работает, пытаясь передать параметр:

function openFile(name){
 XMLHttp.open("GET", "/cgi-bin/readFile.pl"+name, true);
 XMLHttp.onreadystatechange = function() {
 if (XMLHttp.readyState == 4) {
    document.getElementById("TxtArea").innerHTML = XMLHttp.responseText;
     }
     }
     XMLHttp.send(null);
   }

Я пытаюсь передать пареметр таким образом из-за этого примера:

http://www.suite101.com/content/how-to-create-a-simple-perl-ajax-application-a136201

Кто-нибудь может помочь ??

Большое спасибо.


После предложения Кинопико, это имеет смысл, у меня есть следующее:

HTML-

function openFile(name){
            XMLHttp.open("GET", "/cgi-bin/readFile.pl?file="+encodeURI(name), true);
            XMLHttp.onreadystatechange = function() {
            if (XMLHttp.readyState == 4) {
                var container = XMLHttp.responseText.split("\n");
                if (container.length>0){
                    for ( i=0; i< container.length-1;i++){
                        document.getElementById("TxtArea").innerHTML += container[i] + " ";
                    }
                }
            }
            else{
                document.getElementById("TxtArea").innerHTML = "333";//XMLHttp.responseText;
            }
            }
            XMLHttp.send(null);
        }

Perl скрипт:

#!c:/Perl/bin/perl

use strict;
use CGI qw/param/;  
use URI::Escape; 

print "Content-type: text/html\n\n";

my $file = param ('file'); 
$file = uri_unescape ($file); 

open (MYFILE, $file); 
    while (<MYFILE>) {
        chomp;
        print "$_\n";
}
close (MYFILE); 

Теперь я не получаю ошибку в javascript, но мой XMLHttp.readyState никогда не равен 4, поэтому я не получаю содержимое файла.

Может быть, я используюНеправильное кодирование ??

Спасибо.

Ответы [ 2 ]

4 голосов
/ 20 декабря 2010

Прежде всего необходимо добавить знак вопроса:

XMLHttp.open("GET", "/cgi-bin/readFile.pl?file="+name, true);

Также вам нужно кодировать «имя» в процентах, используя encodeURI.

На стороне Perl вы можете использовать модуль типа CGI, чтобы получить значение файла:

 use CGI qw/param/;
 my $file = param ('file');

Тогда

 use URI::Escape;
 $file = uri_unescape ($file);
1 голос
/ 20 декабря 2010
open (MYFILE, $file); 

должно быть

open (MYFILE, $file) or die "Cannot open file $file: $!\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...