我在客户端/服务器环境中广泛使用jQuery $.ajax({dataType: 'json'})
,它工作得很好......当它运行良好时。问题是,当服务器出现故障时,它不会以json格式返回错误消息(我使用带有cgitb
的python)。我想做的是为dataType: 'json'
函数保留success:
,但为error:
函数获取原始文本或html - 有没有办法从jQuery获取未解析的服务器响应在data或errorThown部分?
答案 0 :(得分:0)
问题最终成为了cgitb的reset()
功能,旨在“退出”#34;糟糕的HTML情况,搞砸了jQuery解析,以便在jqXHR传递给error
时,responseText
标记为空。 Safari和Chrome上的错误显示正常,但它实际上是非常糟糕的HTML。我最终替换了cgitb
中的一些函数并使用了cgitb.handle()函数而不是调用cgitb.enable
。这是一些代码:
import sys
import cgitb
def noRest():
return "Content-Type: text/html\n\n<html>\n"
cgitb.reset = noRest
oldhtml = cgitb.html
def newHTML((etype, evalue, etb), context=5):
x = oldhtml((etype, evalue, etb), context)
return x + "\n</body></html>\n"
cgitb.html = newHTML
try:
[ main script here ]
except Exception as e:
cgitb.handler(sys.exc_info())
然后$.ajax({ })
例程可以单独处理,error: function(xhr) { }
处理xhr.responseText
。