Найти - Пользователи
Полная версия: Не работает ajax
Начало » Django » Не работает ajax
1
barabansheg
Ajax реализую на jquery. На локальной машине все работает на ура.
Перенес на хостинг, при проверке csrf выдает следующую ошибку:
'NoneType' object has no attribute ‘startswith’
Вот код на который он ругается:
Файлл: /home/k/krimka/.local/lib/python2.7/site-packages/django/http/__init__.py in _load_post_and_files
            if self.method != 'POST':
                self._post, self._files = QueryDict('', encoding=self._encoding), MultiValueDict()
                return
            if self._read_started and not hasattr(self, '_raw_post_data'):
                self._mark_post_parse_error()
                return
            if self.META.get('CONTENT_TYPE', '').startswith('multipart'): # Вот здесь Почему Content_Type выставляет в None не понятно. 
                if hasattr(self, '_raw_post_data'):
                    # Use already read data
                   data = StringIO(self._raw_post_data)
                else:
                    data = self
                try:
В чем может быть проблема?

Причем другой аякс запрос работает на ура. А на локальном компе все работает как надо

В том, который работает посылается хэдер“ Content-Type application/x-www-form-urlencoded; charset=UTF-8”; А в тех, которые не пашут такого нет. Посылаю ручками(дописываю xhr.setRequestHeader() в before send. Все равно его нет(

Проблема решилась. Из одного файла убрал кусок с before send(они одинаковые во всех) и все заработало.
FishHook
Возможно, Вам поможет вот эта статья
Django ajax csrf
barabansheg
Этим решением я давно пользуюсь. Проблема была в том, что подключалось одновременно много файлов в которых кусок кода из beforeSend(что отсылает X-CSRFToken) дублируется. Сделал лишь в самом первом файле его и все заработало. Но на встроеном сервере работало и без этого.
Вот сам код из beforeSend:
$.ajaxSetup({ 
    beforeSend: function(xhr, settings) {
        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'));
        }
    } 
});
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB