At my day job, I’m a Linux System Administrator. This roughly translates to “Everything System Administrator” as I work in a lot of other capacities as well. One of my duties is maintaining an internal web portal that runs on a RHEL 6 system. A good portion of our portal runs on Python and Perl CGI scripts. I wanted to dynamically update part of a page and I needed to make an Ajax call to a Python script instead of a normal PHP or ASP (etc). I ran into a problem with a not so obvious solution compared to how people make calls to PHP backends.
The script below outlines how to get just the desired <body> portion of the data returned by the Python backend, and trims leading and trailing spaces that might interfere with the operation of your program. This script is for creating a toggle button ( on / off ) which calls a function in the Python backend. Because our backend is a CGI script written in python, python has to print header information, which would be returned to our Ajax script above if we don’t select “document.body” for the context.
FYI, I am using jquery 1.10.1 if you can’t already tell
$(document).ready(function(){ function setoff(myid) { $.ajax({ type: 'POST', url: "/cgi-bin/backend.py", data: {mymode: "setoff", myitem: myid}, dataType: 'html', context: document.body, global: false, async:false, success: function(data) { mylist = $(data).text().trim(); return mylist; } }); } function seton(myid) { $.ajax({ type: 'POST', url: "/cgi-bin/backend.py", data: {mymode: "seton", myitem: myid}, dataType: 'html', context: document.body, global: false, async:false, success: function(data) { mylist = $(data).text().trim(); return mylist; } }); } $(document).on('click', '.istoggled', function() { setoff(this.id); $(this).toggleClass("istoggled nottoggled"); }); $(document).on('click', '.nottoggled', function() { seton(this.id); $(this).toggleClass("istoggled nottoggled"); }); });
Here’s a quick example of a Python backend script.
#!/usr/bin/python import cgi print """Content-type: text/html; charset=utf-8\n\n <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html>""" form = cgi.FieldStorage() mymode = form.getvalue("mymode", "error") myitem = form.getvalue("myitem", "error") def doseton(myitem): ### Code here for backend operation print myitem def dosetoff(myitem): ### Code here for backend operation print myitem if myitem != "error": if mymode == "seton": doseton(myitem) elif mymode == "setoff": dosetoff(myitem) else: print "error" else: print "error" print """</html>"""
Obviously, this file is abbreviated because chances are what I’m doing on the back end isn’t the same as what you’ll want to do