【发布时间】:2011-11-14 18:03:55
【问题描述】:
我有这些代码,我已经用了好几个小时了,但我不知道哪里出了问题。
我不断收到 500 服务器响应,当我触发 ajax 时,它甚至不会在视图定义中开始调试。
我真的很茫然,任何帮助都会很棒!
$('.cheque_info_edit_button').live('click', function(){
var new_cheque = {
// cheque number is taken from the cell, not input box for this one.
cheque_no: $(this).closest('td').closest('tr').find('.inv_prof_cheque_no').text(),
their_bank: $(this).closest('td').closest('tr').find('.new_their_bank_input_ajax').val(),
our_bank: $(this).closest('td').closest('tr').find('.new_our_bank_input_ajax').val(),
cash_in_date: $(this).closest('td').closest('tr').find('.new_cash_in_date_input_ajax').val(),
cheque_amount: $(this).closest('td').closest('tr').find('.new_cheque_amount_input_ajax').val(),
info_type: 'edit'
};
var cheque_json = JSON.stringify(new_cheque);
$.ajax({
type: 'POST',
url: '/best_choose/invoice/profile/inv_add_or_edit_cheque/',
data: cheque_json,
success: function(){
// do stuff
}
更新:我认为我的观点在语法上没有任何问题,所以我将其取出并添加了回溯,是 csrf 令牌有问题吗?我所有的其他 ajax 函数都可以工作
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/best_choose/invoice/profile/inv_add_or_edit_cheque/
Django Version: 1.3
Python Version: 2.7.2
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'SY_SYSTEM.sy_system',
'django.contrib.humanize']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
178. response = middleware_method(request, response)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/middleware/csrf.py" in process_response
287. response.content, n = _POST_FORM_RE.subn(add_csrf_field, response.content)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/http/__init__.py" in _get_content
596. return smart_str(''.join(self._container), self._charset)
Exception Type: TypeError at /best_choose/invoice/profile/inv_add_or_edit_cheque/
Exception Value: sequence item 0: expected string, NoneType found
【问题讨论】:
-
您可能需要检查服务器错误日志。可能是后端脚本出现异常或语法错误。
-
我在本地运行,它只是给我一个 500 错误
-
很明显,因为您明确地捕获并消除了所有异常。不要那样做。去掉 try/except,你会在 Firebug 中看到 traceback。
-
谢谢,我收到 TypeError 并且在回溯中我收到指向此行
response.content, n = _POST_FORM_RE.subn(add_csrf_field, response.content)的错误,但我添加了 csrf ajax 令牌和其他 ajax 调用工作 -
也许发布视图会有所帮助。