Вопрос по django, jquery, ajax, python – Джанго Аякс Jquery Call

7

Это может быть основным, но я потратил два дня, прочитал бесчисленные учебные пособия и все еще не могу заставить это работать. Я просто попытался выполнить основную задачу, просто чтобы увидеть, как она работает. Я хочу отправить вызов ajax на мой вид доната. Я вижу, что он успешно прошел, но я ожидал, что мой шаблон также будет обновлен до "ИСТИНА" но оно остается "ЛОЖНЫМ". Любая помощь или предложения, которые я ценю.

мой JQuery ...

<code>$.ajax({
    type: "POST",
    url:"/donate/",
    data: {
    'test': 'success',
    },
    success: function(){
      alert('test')
     },
    error: function(){
        alert("Error");
});
</code>

это мой взгляд ...

<code>def donate(request):
    if request.is_ajax():
        test = "TRUE"

    if request.method == 'POST':
        form = DonateForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = DonateForm()
        test = "FALSE"

    return render_to_response('donate_form.html', {'form':form,'test':test}, context_instance=RequestContext(request))
</code>

мой шаблон включает это ...

<code><h1>{{ test }}</h1>
</code>
Update/Solution

Как упоминалось в комментариях к этому вопросу, я ничего не делал с возвращенными данными. Я обновил свой звонок об успехе следующим образом, и это сработало

<code>    $.ajax({
    type: "POST",
    url:"/donate/",
    data: {
    'zip': zip,
    },
    success: function(data){            

        results = $(data).find('#results').html()               
        $("#id_date").replaceWith("<span>" + results + "</span >");

    },
    error: function(){
        alert("Error");
    },
</code>
вsuccess() играть с DOM okm
Как вы проверяете возвращенный контент? okm
Я с @okm. JS, который вы нам даете, на самом деле ничего не делает с полученными данными. Theron Luhn
Извините, поскольку я все еще относительно новичок в AJAX. Я следовал инструкциям Ричардса, приведенным ниже, и смог просмотреть инструменты разработчика chromes, предварительно просмотренный html через вкладку сети после запуска запроса ajax. Как я тогда скажу странице обновить новый HTML? Austin

Ваш Ответ

3   ответа
0

request.is_ajax() test проверяет, существует ли заголовок HTTP_X_REQUESTED_WITH, который JQuery должен установить перед отправкой вашего запроса. (Если вы используете XMLHttpRequest вручную, вы также должны добавить этот заголовок вручную.) Мне лично нравится идти другим путем, потому что его проще тестировать и он не опирается на HTTP-заголовки: добавление параметра запроса к URL-адресу, такого как & APOS;? = тип Ajax & APOS ;.

Затем вы изменитеrequest.is_ajax() вrequest.GET.get('type', null) == 'ajax' и в вашем JavaScript изменитьurl:"/donate/" вurl:"/donate/?type=ajax".

Хорошая особенность этого подхода в том, что вы можете тестировать эти вызовы без использования AJAX, просто добавив?type=ajax Строка для любого запроса.

12

Я думаю, что проблема в том, где вы передаете данные. Ты используешьFirebug? Отличный инструмент для проверки, если вы передаете что-нибудь вPOSTэто отличный инструмент для веб-разработки в целом.

Вот рабочий пример отправки вызова Ajax из формы

$("#form").submit(function(event) {
        var $form = $(this),
        $inputs = $form.find("input, select, button, textarea"),
        serializedData = $form.serialize();

        $.ajax({
            url: "/donate/",
            type: "post",
            data: serializeData,
            success: function(response) {
                alert(response)
            }
        })
        event.preventDefault();
    });

и тогда ваш взгляд может выглядеть примерно так

if request.is_ajax() or request.method == 'POST':
        form = DonateForm(data=request.POST)
        if form.is_valid():
            return HttpResponse("Success")
        else:
            return HttpResponse("Fail")

Кстати, если вам действительно не нужны все дополнения от$.ajax() Я бы предложил вам использовать$.post() вместо этого, поскольку это кажется более прямым, чтобы использовать.

2

Я думаю, что есть несколько вещей, которые не так с вашим кодом ...

  1. You are sending a POST request to django without csrf_token => django will not return a success for this request. You need to send csrf_token with POST request. Check with firebug.

  2. Even if django is not giving any error then you are not changing the content of your page (on browser) anywhere... djang will send back this string -> "success" ...that's all.

Вы должны изменить свой код следующим образом,

add & apos; django.core.context_processors.csrf & apos; TEMPLATE_CONTEXT_PROCESSORS в settings.py, чтобы получить доступ к токену csrf во всех шаблонах.

ваш текущий шаблон:

<html>
    <script type="text/javascript">
    $("#form").submit(function(e) {
        e.preventDefault();
        serializedData = $("#form").serialize();

        $.ajax({
           url: "/donate/",
           type: "post",
           data: serializeData,
           cache: 'false',
           dataType: "json",
           async: 'true',

           success: function(data) {
               alert(data)
           },
           error:function(data) {
               alert("error in getting from server")
           },
        });
    });  
    </script>
    <body>
        <form id="form">
            {% csrf_token %}
            {% for field in form %}
                {{ field }}
            {% endfor %}
        </form>
    <body>
</html>

пожертвовать вид:

def donate(request):
    if request.method == 'POST':
        form = DonateForm(data=request.POST)
        if form.is_valid():
            form.save()
            return HttpResponse("SuccessFully Saved")
        else:
            return HttpResponse("Error in saving")

Теперь вы увидите:

  • SuccessFully Saved -> if successfuly saved data.
  • Error in saving -> If data not saved for some reason.
  • error in getting from server -> if server responded with some error.

Похожие вопросы