2

i'm trying to send a Json object printed from a .py file to the getJson method of Jquery but something is going wrong. I made some simple examples out of my big project containing the code that is not working. Some help would be much appreciated!


Html File:

<html xmlns=" http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Request json test</title> 
<script src="http://code.jquery.com/jquery-1.5.js"></script>
<script src="/js/json-jquery.js" type="text/javascript"></script> 
</head>
<body>
<a href="#" id="getdata-button">Get JSON Data</a>
<div id="showdata"></div>
</body>
</html>

JS file:

$(document).ready(function(){
    $('#getdata-button').live('click', function(){
        console.log("echo ")

        $.getJSON("/js/getActive.py", function(data) {
            console.log("echo "+ data)
            $('#showdata').html("<p>item1="+data.item1+"</p>");
        });
    });
});

.py file:

import json
impact="pedro"
print json.dumps({'item1': impact})

About the problem it doesn't print anything below the $.getJSON instruction. I've checked on browser and the script is found and got OK status by http. Really don't know what might be going on. Sorry if it is something obvious and thank you in advance for the help you might give.

I tried doing this with a .txt file with some respecting json format lines and it works fine.

----------

UPDATE: Solution

Since I'm using Django it works a little different from the examples, I wasn't thinking straight. here it goes.

The JS file should call some url that you have on your URLs.py that redirects you for some function in views.py

$(document).ready(function(){ 
    //attach a jQuery live event to the button
    $('#getdata-button').live('click', function(){
        console.log("echo ")

        $.getJSON("teste.html", function(data) {

        console.log("echo "+ data)
            //alert(data); //uncomment this for debug
            //alert (data.item1+" "+data.item2+" "+data.item3); //further debug
            $('#showdata').html("<p>teste="+data.item1+"</p>");
        });
    });
});

Then in views.py just deal the information you need and make an httpResponse with the JSON back to the JS to process it to the view.

def teste(request):
    to_json = {
        "item1": "pedro"
    }
    return HttpResponse(simplejson.dumps(to_json), mimetype='application/json')
ramaro
  • 23
  • 1
  • 4

1 Answers1

0

how do you serve the getActive.py ?

You need a rich webserver to add a response header for getActive.py. "Content-Type" = "application/json."

pylover
  • 7,670
  • 8
  • 51
  • 73
  • I'm using django lightweight development Web server.. could it be the reason? – ramaro Apr 13 '12 at 16:35
  • if you want to serve json using django , use this: http://stackoverflow.com/questions/2428092/django-python-creating-a-json-response – pylover Apr 13 '12 at 16:37
  • 1
    Thank you @pylover, you were right, my bad. I was doing this calling that script directly which doesn't work for django. So i just created a new function on views.py which I call from the .js, does what I want and return an httpResponse with the Json info. plus the header. Thanks once again. I'm finally moving forward. I will edit my post with the solution I came out with. – ramaro Apr 13 '12 at 17:19