i learning , using ajax without jquery lib. created simple view renders random number on template. added button , called ajax function. however, clicking button doesn't change value on screen. checked in dom (firebug) , shows sometext.responsetext yielding whole html rather value, has new value in html. sharing provide more information on have found far. new , experimented lot ex; have checked "request.is_ajax():" somehow view not find ajax in request. have printed request on command line , querydict empty.
obviously not doing in correct manner django. please assist.
i have view;
def home(request): rand_num = random.randint(1,100) return render(request, 'home.html', {'rand_num':rand_num})
and html , script;
<html> <head> <script type='text/javascript'> var sometext; function helloworld(){ sometext = new xmlhttprequest(); sometext.onreadystatechange = callback; sometext.open("get", "{% url 'home' %}", true); sometext.send(); }; // when information comes server. function callback(){ if(sometext.readystate==4 && sometext.status==200){ document.getelementbyid('result').innerhtml = sometext.responsetext; } }; </script> </head> <body> <div id="result">{{rand_num}}</div> <input type='button' value='abraca dabra!' onclick="helloworld()"/> </body> </html>
here url view;
url(r'^$', 'socialauth.views.home', name='home'),
i learning online tutorial.
that because ajax endpoint whole view - i.e. ajax request asks whole rendered template.
what want number, make new view , url return number, , make ajax request that.
ajax isn't special, way make asynchronous request url , contents returned.
for reference, view using jsonresponse:
from django.http import jsonresponse def get_random_number_json(request): random_no = random.randint(1,100) return jsonresponse({'random_no': random_no})
then in frontend javascript, fetch url view, give json in javascript variable via ajax call, , instead of document.getelementbyid('result')
processing, can grab variable json object.
Comments
Post a Comment