window.location не работает

Я использую jQuery с Django на стороне сервера. Что я пытаюсь сделать, так это получить текст от пользователя через форму и одновременно отобразить текст в области холста, как это делают about.me и flavors.me. Затем пользователь перетаскивает текст в области холста в нужное место, и когда он нажимает кнопку «Далее», данные должны быть сохранены в базе данных и перенаправлены на домашнюю страницу. Все работает отлично (данные хранятся в базе данных), за исключением случаев, когда я нажимаю кнопку, для которой я устанавливаю window.location в "http://127.0.0.1:8000"., но я не попадаю на эту страницу, когда нажимаю кнопку.

Я получаю некоторые ошибки на сервере Django:

error: [Errno 32] Broken pipe
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 51161)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 284, in _handle_request_noblock

Вот мой html: https://gist.github.com/2359541

Джанго views.py:

из cover.models импортировать CoverModel из django.http импортировать HttpResponseRedirect

def coverview(request):
    if request.is_ajax():
            t = request.POST.get('top')
            l = request.POST.get('left')
            n = request.POST.get('name')
            h = request.POST.get('headline')
            try:
                    g = CoverModel.objects.get(user=request.user)
            except CoverModel.DoesNotExist:
                    co = CoverModel(top=t, left=l, name=n, headline=h)
                    co.user = request.user
                    co.save()
            else:
                    g.top = t
                    g.left = l
                    g.name = n
                    g.headline = h
                    g.save()
            return HttpResponseRedirect("/")

URL.py:

url(r'^cover/check/$', 'cover.views.coverview'),
url(r'^cover/$', login_required(direct_to_template), {'template': 'cover.html'}),

Кто-нибудь может мне помочь?

Спасибо!


person rnk    schedule 11.04.2012    source источник
comment
Вероятно, проблема на стороне сервера, то есть с вашим кодом Python.   -  person Felix Kling    schedule 11.04.2012
comment
Вы должны удалить HttpResponseRedirect('/') со стороны Python. Туда тоже перенаправлять не нужно. Просто верните HttpResponse('loaded') или что-то в этом роде.   -  person Jordan    schedule 11.04.2012
comment
@Jordan Я изменил его, но получил ту же ошибку Broken Pipe. Между спасибо!   -  person rnk    schedule 11.04.2012


Ответы (2)


В вашем вопросе действительно недостаточно информации для правильной диагностики, но вы можете попробовать следующее:

Всегда жестко закодировать доменное имя в JS — плохая идея. Что происходит, например, когда вы запускаете это в производство? Если вы хотите отправить пользователя на домашнюю страницу (предположительно из местоположения, установленного на http://127.0.0.1:8000/), просто установите местоположение на /. Это гарантирует, что он всегда будет идти в корень сайта, независимо от IP-адреса, доменного имени или порта.

person Chris Pratt    schedule 11.04.2012

Часть проблемы заключается в том, что вы пытаетесь опубликовать данные, а затем сразу же покидаете страницу, используя window.location. Вы должны изменять window.location только всякий раз, когда получаете ответ от $.post().

$.post("check/", { top: t, left: l, name: n, headline: h}, function(data) {
    window.location.href = "/";
});

Обратите также внимание, что я удалил жестко заданный URL. Используйте относительный здесь, как сказал Крис.

Если он по-прежнему не работает, вам нужно проверить наличие ошибок Javascript в строках выше. Используйте Firebug, Chrome Dev Tools, Opera Dragonfly, что-нибудь. Убедитесь, что ваш POST действительно проходит, и опубликуйте больше данных об этом здесь.

person Jordan    schedule 11.04.2012
comment
До сих пор не работает. Я уверен, что сообщение работает, потому что я получаю данные на стороне сервера. Я обновил свой вопрос. Пожалуйста, проверь это. - person rnk; 11.04.2012
comment
Я перенаправляюсь на ту же страницу. Поэтому я не вижу ошибок в браузере Chrome. - person rnk; 11.04.2012
comment
Подождите, если вы перенаправляете, значит ли это, что это работает? Я думал, что ваш вопрос был о том, как это не перенаправляет. - person Jordan; 11.04.2012
comment
Я хочу перенаправить на домашнюю страницу, которая является локальным хостом 127.0.0.1:8000. Но здесь я перенаправляюсь на та же страница 127.0.0.1:8000/cover Если вам нужна дополнительная информация, я могу вам ее предоставить. - person rnk; 11.04.2012
comment
Использование кода, который я разместил, перенаправит вас на домашнюю страницу. Можете ли вы обновить свою суть или вопрос тем, что у вас есть сейчас, но все еще не работает? - person Jordan; 11.04.2012