State 2: Query the JUD
The submission of the HTML form will cause a number of
name/value pairs to be passed as part of the
HTTP GET request. These names and values are captured into the
@a array as described earlier. If we have more than
one entry in @a, we know it’s a form submission
and must respond to that by querying the JUD and returning the results.
In this case, as we know that the contents of @a
are name/value pairs, we can view those contents as a hash, using
a new variable %a:
elsif (scalar @a > 1) {
my %a = @a;
Now, %a will contain entries where the keys are
the names of the search fields and the values are the values entered
in the form.
In the same way that we constructed an IQ-get to query the JUD for the search fields and instructions, we construct an IQ-set to perform the actual query:
my $iq = $nf->newNode('iq');
$iq->attr('to', JUD);
$iq->attr('type', IQ_SET);
my $query = $iq->insertTag('query', NS_SEARCH);
Using the information in %a, we insert tags for
each of the search fields for which a value was specified in the
form. For example, if only the value adams was specified, in the
field representing the <last/> search
field, as shown in Figure 10-3, we would
only want to insert:
<last>adams</last>
as a child of the IQ-set’s <query/>
tag:
while (my($name, $val) = each(%a)) {
$query->insertTag($name)->data($val) if $val;
}
Also in a similar way to handling state 1, we make the call by using
the ask() method; the response will be received
into the $result variable ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access