可以调用ajax / ajax方法

时间:2011-11-19 05:56:46

标签: javascript ajax django

我正在编写一个django应用程序,用户想要点击按钮并进行部分页面更改。数据需求从服务器传递到网页,无需完整的页面刷新。那个任务听起来像ajax的工作。但是,我无法在我的应用程序中使用Ajax。

我无法将呼叫接入我的服务器端功能。以下是主题未接来电的代码。我的目的是让服务器端返回未接来电列表并将其显示给用户而无需刷新页面。

当我点击按钮时,我会使用firebug弹出一个“出问题”的弹出窗口,我将其跟踪到DAJAXICE_EXCEPTION,但我对此一无所知。

这里发生了什么?我该如何工作?此外,如果有一个更简单的方法来做这个不需要Dajax库请告知。任何分步示例都会非常有用。

服务器端功能

-------- /jim/ajax.py ---------

@dajaxice_register 
def missedCalls(request, user): 
    print "Ajax:missedCalls"    #never prints...
    missedCalls = ScheduledCall.objects.filter(status__exact='Missed') 
    render = render_to_string('examples/pagination_page.html', { 'missedCalls': missedCalls }) 
    dajax = Dajax() 
    dajax.assign('#calls','innerHTML', render) 
    return dajax.json() 

------- page.html中---------

 <script type='text/javascript'>
   function missed_calls_callback(data){
      # The dajax library wants a function as a return call.
      # Have no idea what I'm supposed to do with this part of the function.
      # what is supposed to go here?
      alert(data.message);
   }  
 </script>

 <!-- Button -->
 <input type="button" name="calltest" value="JQuery Test" 
    id="calltest" onclick="Dajaxice.jim.missedCalls(missed_calls_callback, {'user':{{ user }}})">


  <div id="calls">
     {% include "calls.html" %}
  </div>

-------- -------- calls.html

<h2> Missed Calls</h2>
<ul>         
{% for i in missedCalls.object_list %}         
    <li>{{ i }}</li>
{% endfor %}     
</ul>  

1 个答案:

答案 0 :(得分:0)

在开始使用库之前,如果手动执行可能会有所帮助(查看正在进行的操作)。

ajax请求是一个HTTP请求,除了它是异步发生(即在正常的请求/响应周期之外),它通常返回json或xml(尽管如果你愿意,你可以返回html)。

这意味着要接受AJAX请求,您只需创建一个网址并按正常方式查看。

<强> urls.py

...
url(r"^/my/ajax/path/$", myapp.views.ajax_view, name="do-something-ajaxy"),
...

<强> views.py

def ajax_view(self, request):
    # Django's Request objects have a method is_ajax()* 
    # which checks the header to see if it's an 'ajax' request
    if request.is_ajax():
        raise Http404
    missedCalls = ScheduledCall.objects.filter(status__exact='Missed') 
    # You can return a dictionary-like json object which can be manipulated by the javascript when it receives it
    return HttpResponse(simplejson.dumps(missedCalls), mimetype='application/javascript')

https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.is_ajax

使用jquery执行ajax请求:

(function($){
    $.ajax({
        type: 'GET',
        url: '/my/ajax/path/',
        success: function(data){
            for call in data:
                /* Do something with each missed call */
        },
    });
});