perl-embperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Donavon <d...@mycopanet.com>
Subject Re: EMBPERL: accepting json Working Example
Date Tue, 20 Sep 2016 22:54:24 GMT
This is what I was able to get working...

I used a regular javascript "XMLHttpRequest()" rather than the jQuery 
"|$.ajax({||});" from my original request.
|

General Requirements:

- Directory needs to be able to use an .htaccess file

- perl JSON Module needs to be installed


Suggested changes and modifications are greatly appreciated.  I still 
need to get GET, PATCH and DELETE working.

Thank You and I HOPE this comes in handy to others!!!
~Donavon


*.htaccess*

<Files "json-submit.epl">

   EMBPERL_OPTIONS 256

</Files>




*base.html*

<!DOCTYPE html>

<html lang="en">

<head>

<title> </title>

</head>

<body  >

Hello World!!!

<script>

   var url   = "json-submit.epl";

   var data  = {

     "firstName"     : "Joe1",

     "lastName"      : "Schmoe1"

   };

   var callback = function (data) {

     var json = JSON.parse(data.responseText);

     alert(JSON.stringify(json));

   };

   var request = new XMLHttpRequest();

   request.open("POST", url);

   request.onreadystatechange = function() {

     if(request.readyState === 4 && callback) {

       callback(request);

     }

   };

   request.setRequestHeader('Content-Type', 'application/json; 
charset=UTF-8');

   request.send(JSON.stringify(data));

</script>

</body>

</html>






*json-submit.epl*

[-

use JSON;                           # imports encode_json, decode_json, 
to_json and from_json.

# to mimic proper Boolean data type

use constant false => 0;

use constant true  => 1;

%param              = ();


$returnHash{method} = $req_rec->method();

# params from json

%param    = ();

use CGI;

$q = new CGI;

if($req_rec->method() eq 'POST') {

   $postData   = decode_json($q->param('POSTDATA'));

   %param      = %$postData;

   $return     = true;

}

elsif($req_rec->method() eq 'PUT') {

   $putData    = decode_json($q->param('PUTDATA'));

   %param      = %$putData;

   $return     = true;

}

elsif($req_rec->method() eq 'GET') {

   # ????????????????????????????????

   $return     = true;

}

elsif($req_rec->method() eq 'PATCH') {

   # ????????????????????????????????

   $return     = true;

}

elsif($req_rec->method() eq 'DELETE') {

   # ????????????????????????????????

   $return     = true;

}

else {

   $return     = false;

}

$returnHash{param}    = $param;

%{$returnHash{param}} = %param;

$return = true;

$json{return}     = $return;

$json{returnHash} = \%returnHash;

$escmode = 0;

print OUT encode_json(\%json);

-]



On 9/8/2016 10:04 AM, Donavon wrote:
>
> I agree with all of the responses that Embed perl was made to mainly 
> use CGI.pm and multipart/form-data and really shouldn't be used 
> outside of that.
>
> BUT As long as there is possibility that it might be able to receive 
> application/json data I have to look for a way to do it.  It's part of 
> my job to look for solutions that work within current limitations.
>
> If every response to this email is "It's not possible" that is 
> something I can take to a meeting.  If the responses are "You 
> shouldn't or it's difficult" then I have to keep searching for a 
> solution that is understandable and workable.
>
> I'm willing to pay a small consulting fee or a donation to a charity, 
> for assistance in figuring this out.
>
> So what are the suggestions for handling a call like this on a script 
> by script basis.  I might be possible to limit the scripts accepting 
> these calls to specific directories.
>
> |varformData 
> ={"data1":a,"data2":b,"data3":c};$.ajax({dataType:"json",contentType 
> :"application/json; 
> charset=UTF-8",url:'/folder1/doSomething1.epl',data 
> :formData,success:function(response){CurrentArray=response;}}); Thank 
> You, ~Donavon |
>
>
>
>
>
>
> On 9/4/2016 2:30 AM, Michael Smith wrote:
>> I wouldn't use embperl to accept json.  I see embperl as being 
>> designed for HTML output, so I don't really see how it helps when 
>> dealing with json.
>>
>> On Fri, Sep 2, 2016 at 11:43 PM, Donavon <donl@mycopanet.com 
>> <mailto:donl@mycopanet.com>> wrote:
>>
>>     Good to know that there are still some Embperl users out there.
>>
>>     We have a large SAAS system mainly in Embperl, so our usage of
>>     Embperl is not going away anytime soon.
>>
>>
>>     My current question to the Embperl community is:
>>
>>     *How to accept **application/json?*
>>
>>     **I know that "Embperl uses CGI.pm internally to process forms
>>     encoded with multipart/form-data" and that get processed into %fdat.
>>
>>     Is there a way to disable this behavior dynamically per page to
>>     accept application/json data.
>>
>>     Thanks,
>>     ~Donavon
>>
>>
>>
>>
>


Mime
View raw message