Hi! On Mon, Jun 28, 2010 at 4:26 PM, Ludwig Isaac Lim <[email protected]> wrote: > Hi: > > I'm writing a web-app Ajax and perl. Outputs of the server are either in > JSON or CSV.
[...] > My problem is if output_JSON is called twice (or output_Excel is called > after an output_JSON), the CGI headers are included in the data (not headers) > send back to client, thus making the data un-parsable or corrupt. I was able > to > verify that the HTTP headers got included in data via means Firebug plugin for > firefox. > [...] > > I'm running the whole stuff on Perl 5.8.0, and on an antiquated version of > Apache (1.x series), and HP-UX. Any ideas? I already spend a lot of time > googling on "CGI" and "HTTP" If not because you're on 5.8.0, I'd suggest using Mojolicious,[0] as it has native JSON output (and also WriteExcel support, via my shiny new MojoX::Renderer::WriteExcel[1] which I'm still improving on ;) [0] http://mojolicious.org [1] http://search.cpan.org/dist/MojoX-Renderer-WriteExcel/ As you're on 5.8.0, I presume your $CGI::VERSION is 2.81 (unless you upgraded it.) Checking both perldelta and CGI.pm's Changes,[2] there are a few behavior changes in $cgi->header() so you might want to look at the list, and possibly upgrade. [2] http://cpansearch.perl.org/src/LDS/CGI.pm-3.49/Changes Anyway, looking at your subs above, I see that you print your data to different filehandles, while your $cgi->header() call prints to the default filehandle (presumably STDOUT). Maybe that's where your problem is? Or maybe, just maybe, those filehandles after print are actually functions :P If that's the case, then you're calling them wrong, because print() will treat those as filehandles (e.g. print()'s first form, print FILEHANDLE LIST in `perldoc -f print'.) You should be calling them like print json_encode($ref_data); Thinking about it more, I also see your output_* functions repeat a basic function: set a header then print data. I think a better approach would be to have a hash that collects these info (headers and data) then pass this hash to a generic renderer function that does all the output for you in one section of code. Come to think of it, this is exactly the way Mojolicious does this (via MojoX::Renderer). -- Zak B. Elep || zakame.net 1486 7957 454D E529 E4F1 F75E 5787 B1FD FA53 851D _________________________________________________ Philippine Linux Users' Group (PLUG) Mailing List http://lists.linux.org.ph/mailman/listinfo/plug Searchable Archives: http://archives.free.net.ph

