timofeydeys
@timofeydeys
Свобода творцов

Django + Ajax. Правильно ли составлен запрос?

Добрый день уважаемые форумчане. Прошу помидорами не кидать, только учусь. Проблема с ajax запросами. Точнее, как я понимаю они теряются или не туда уходят. Т.к. при успехе у меня JS перезагружает страницу, она перезагружается, т.е. скрипт выполняется и отправляет. А вот запись в БД не изменяется.
CRM мое приложение по адресу {{url}}/crm лежит. И в нем уже есть подвкладки, т.е. {{url}}/crm/my_work это путь вкладки, которую я скинул сюда. Объясните пожалуйста что к чему, и с полным примером кода или исправлением моего пожалуйста, что бы мне разобраться. Прикрепляю код:
views.py
def NBEdit(request):
    if request.method == "POST" and request.is_ajax():
        MD = MyDela(
            pk=request.POST.post("id", ""),
            name=request.POST.post("name", "")[:250],
            information=request.POST.post("info", "")
        )
        MD.save()
        return HttpResponse("ok")
    else:
        return HttpResponse("bad")


models.py
class MyDela(models.Model):
    name = models.CharField(max_length=250)
    kr_info = models.CharField(max_length=300)
    date_firstly = models.DateTimeField(auto_now_add=True)
    date_edit = models.DateTimeField(auto_now=True)
    information = models.TextField()
    status = models.IntegerField()
    user = models.ForeignKey(User)


urls.py моего приложения, НЕ ПРОЕКТА ЦЕЛИКОМ
urlpatterns = patterns('',
    # ex: /cab Klients/
    url(r'^$', views.main, name='crm_main'),
    url(r'^my_work/new', views.ValidLoginMain, name='crm_new_NB'),
    url(r'^my_work/newNB/', views.NBEdit, name='crm_NBEdit'),
)


n_b_new.html
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
    <div class="new_notebook">
        <form method="POST">
        {% csrf_token %}
            <div class="new_head_notebook" id="name" contentEditable="true">
                {{MD.name}}
            </div>
            <div class="save"><input id="save" type="button" value="Сохранить" onclick = "zapros();"/></div>
            <div class="new_information_notebook" id="information" contentEditable="true">
                {{MD.information}}
            </div>
            <div style="display:none" id="pk">{{MD.id}}</div>
        </form>
    </div>


    <script>
function zapros() {
//
    var name = document.getElementById("name").innerHTML;
    var info = document.getElementById("information").innerHTML;
    var id = document.getElementById("pk").innerHTML;
//
// Если поля заполнены, отправляем их значения
    if (true) {
        $.ajax({
            url: "{{url}}/crm/my_work/newNB/",
            type: 'POST',
            dataType:"html",
            data: {
                "name": name,
                "info": info,
                "id": id,
            },
            error: function() {
                alert('Ошибка получения запроса');
            },
// При успехе очищаем поля и меняем кнопочку
            success: function(data) {
             location.reload(); // для проверки, что скрипт работает
            },
// CSRF механизм защиты Django
            beforeSend: function(xhr, settings) {
                console.log('-------------before send--');
                function getCookie(name) {
                    var cookieValue = null;
                    if (document.cookie && document.cookie != '') {
                        var cookies = document.cookie.split(';');
                        for (var i = 0; i < cookies.length; i++) {
                            var cookie = jQuery.trim(cookies[i]);
                            // Does this cookie string begin with the name we want?
                        if (cookie.substring(0, name.length + 1) == (name + '=')) {
                            cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                            break;
                        }
                    }
                }
                return cookieValue;
                }
                if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
                    // Only send the token to relative URLs i.e. locally.
                    xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
                }
            }
        });// ajax
    }
    return false;
};
</script>
  • Вопрос задан
  • 411 просмотров
Пригласить эксперта
Ответы на вопрос 1
pinkevich
@pinkevich
Developer
Поменять во вьюхе request.POST.post("id", "") на request.POST.get("id", "") (и для всех остальных так же)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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