Не удается вызвать метод ajax / dajax - PullRequest
0 голосов
/ 19 ноября 2011

Я пишу приложение 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 голосов
/ 19 ноября 2011

Прежде чем вы начнете использовать библиотеку, может быть полезно сделать это вручную (чтобы увидеть, что происходит).

Ajax-запрос - это HTTP-запрос, как и любой другой, за исключением того, что он выполняется асинхронно (т. Е. Вне обычного цикла запроса / ответа) и обычно возвращает json или xml (хотя вы можете вернуть html, если хотите).

Это означает, что для принятия AJAX-запроса вы просто создаете URL и просматриваете его, как обычно.

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 */
        },
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...