Thread Zeichen geht verloren bei Ajax Request? (53 answers)
Opened by bianca at 2012-07-12 05:41

bianca
 2012-07-12 05:41
#159762 #159762
User since
2009-09-13
6977 Artikel
BenutzerIn

user image
Guten Morgen!
Habe mir da so ein Autocomplete gebastelt mit teilweise im Netz gefundenem Code. Funktioniert soweit auch ganz gut aber eine Kleinigkeit ist komisch.

Bei dem Suchbegriff r+ geht beim Request das Plus verloren. Im JS alert() ist es scheinbar noch da aber im Perlscript gleich ganz oben in $quoted scheinbar schon nicht mehr. Denn es matcht den Eintrag 6 aus dem Hash nicht und zeigt auch im Eintrag 9/Debug nur ein r\ 

Jemand eine Idee, wo der Fehler liegt?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!DOCTYPE HTML> 
<html>
<head>
<title>Test jQuery</title>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="jquery-ui-1.8.21.custom.min.js"></script>
<script type="text/javascript" src="/javascript/jquery-set.js"></script>
<link rel="stylesheet" type="text/css" href="/css/jquery-ui.css">
<meta http-equiv="content-type" content="text/html;CHARSET=iso-8859-1">
</head>
<body>
<div class="demo2">
<div>
<label for="tags2">Suchbegriff:</label>
<input id="tags2">
</div>
</div>
<script>
jQuery(function() {
jQuery("#tags2").autocomplete({
source: function(request,response) {
var requestIndex = 0;
alert('Request: "'+escape(request.term)+'"');
$.ajax({
url: "test_autoc.pl",
data: "term=" + escape(request.term),
processData: false,
contentType: "application/json; charset=ISO-8859-1",
dataType: "json",
cache: false,
autocompleteRequest: requestIndex += 1,
success: function(data,status) {
if (this.autocompleteRequest === requestIndex) {
response(data);
}
},
error: function() {
if (this.autocompleteRequest === requestIndex) {
response([]);
}
}
});
},
minLength: 2
});
});
</script>
</div>
</body>
</html>

Das Perlscript test_autoc.pl:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/perl -w
use strict;
use warnings;
use CGI;
use JSON qw (encode_json);

my $cgi = CGI->new;
my $quoted = quotemeta $cgi->param('term');
my %hash = (
    1   => 'Erna',
    2   => 'Erwin',
    3   => 'Markus',
    4   => 'Heidi Petra',
    5   => 'Test Quoting "mit" Anführungszeichen',
    6   => 'Test mit Plus r+x',
    9   => 'Suchbegriff/Debug: "' . $quoted . '"',
);
my @json_array;
foreach my $id (
    sort {lc $hash{$a} cmp lc $hash{$b}}
    grep {$hash{$_} =~ m/$quoted/i || $_ == 9}
    keys %hash
) {
    push @json_array,{
        id      => $hash{$id},
        label   => $hash{$id},
        value   => $hash{$id},
    };
}
print STDOUT $cgi->header . JSON->new->latin1->encode(\@json_array);


Danke

Edit: Habe zwei Screenshots angehängt die meine Ausgaben zeigen.

Umgebung: Win7 32 Bit, IE9, Strawberry Perl 5.10.1, Apache Webserver 2.2
Anhänge
image/png
208 x 188
fehler_autoc1.png
fehler_autoc1.png
image/png
262 x 74
fehler_autoc2.png
fehler_autoc2.png

Last edited: 2012-07-12 05:47:11 +0200 (CEST)
10 print "Hallo"
20 goto 10

View full thread Zeichen geht verloren bei Ajax Request?