Nelmo
Nelmo

Reputation: 215

Call Javascript function from Perl

This should be simple - don't get what I'm doing wrong! This is a very basic test (I'm new to PERL and Javascript) - this is the CGI file:

#! /usr/local/bin/perl

print "Content-type: text/html\n\n";
print "<html>\n" ;
print "<head>Hello\n";
print '<script type="text/javascript" language="javascript" src="wibble.js">\n';
print "</script>\n";
print "</head>\n";

print "<body>\n";

$fred = "Fred";
$numb = 7;

print <<TEST;

<p>Starting...</p>
<p><script type="text/javascript" language="javascript">
theText = "$fred";
theNum = "$numb";
document.writeln("Direct write...");
document.writeln("Number is: " + theNum);
document.writeln("Text is: " + theText);

testWrite(theNum, theText);

</script></p>

<p>...ending JS</p>

TEST

and in wibble.js:

function testWrite(num1, txt1)
{
   document.writeln("In testWrite...");
   document.writeln("Number is: " + num1);
   document.writeln("Text is: " + txt1);
}

In my browser, I get the first set of writeln's but my function is never called. The error on the webpage says 'Object expected' at line 15 (the 'print <<TEST' line).

I mostly suspect I haven't got the right path in my src element but I've tried every combination I can think of ('.', './', full path etc) - nothing works. The js file is in the same dir as the CGI file.

(I actually originally had the function call with no parameters, hoping that theNum and theText are global and will still work (that was the original point of this test program)).

Please put me out of my misery...

As requested, here is source code from browser:

<html>
<head><script type="text/javascript" language="javascript" src="wibble.js"></script>
</head>
<body>

<p>Starting...</p>
<p><script type="text/javascript" language="javascript"> 
theText = "Fred";
theNum = "7";
document.writeln("Direct write...");
document.writeln("Number is: " + theNum);
document.writeln("Text is: " + theText);

testWrite(theNum, theText);

</script></p>

<p>...ending JS</p>

</body>
</html>

and this is the actual output on the web page:

Starting...

Direct write... Number is: 7 Text is: Fred 

...ending JS

Upvotes: 0

Views: 4931

Answers (1)

Marc B
Marc B

Reputation: 360872

Did you check your server's log to see if wibble.js is ever requested? If it's not, then there's your problem. As well, while not really the problem, this line:

print "<head>Hello\n";

is generating bad html. You can't have "bare" text in the <head> block.

For global JS variables, you use the var keyword.

x = 7; // local
var y = 7; // global

Upvotes: 3

Related Questions