Javascript jQuery ajax json——查看返回的不正确数据

Javascript jQuery ajax json——查看返回的不正确数据,javascript,jquery,python,ajax,json,Javascript,Jquery,Python,Ajax,Json,我在客户机/服务器环境中广泛使用jQuery$.ajax({dataType:'json'}),它工作得很好…当它工作得很好时。问题是,当服务器出现故障时,它不会以json格式返回错误消息(我使用的是python withcgib)。我想做的是为成功:函数保留数据类型:“json”,但为错误:函数获取原始文本或html——有没有办法从jQuery的数据部分或错误部分获取未解析的服务器响应?问题最终是cgitb的重置()函数,设计用于“摆脱”糟糕的HTML环境的jqXHR正在破坏jQuery解析,

我在客户机/服务器环境中广泛使用jQuery
$.ajax({dataType:'json'})
,它工作得很好…当它工作得很好时。问题是,当服务器出现故障时,它不会以json格式返回错误消息(我使用的是python with
cgib
)。我想做的是为
成功:
函数保留
数据类型:“json”
,但为
错误:
函数获取原始文本或html——有没有办法从jQuery的数据部分或错误部分获取未解析的服务器响应?

问题最终是cgitb的
重置()
函数,设计用于“摆脱”糟糕的HTML环境的jqXHR正在破坏jQuery解析,因此当jqXHR被传递到
error
时,
responseText
标记是空的。这个错误在Safari和Chrome上显示得很好,但实际上是格式极其糟糕的HTML。我最终替换了
cgib
中的一些函数,并使用cgib.handle()函数,而不是调用
cgib.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())
导入系统 进口cgitb def noRest(): 返回“内容类型:text/html\n\n\n” cgib.reset=noRest oldhtml=cgib.html def newHTML((etype,evalue,etb),context=5): x=oldhtml((etype,evalue,etb),上下文) 返回x+“\n\n” cgib.html=newHTML 尝试: [这里是主脚本] 例外情况除外,如e: cgib.handler(sys.exc_info())
然后,
$.ajax({})
例程就可以独立运行了,
error:function(xhr){}
处理
xhr.responseText

一个解决方案就是简单地删除
数据类型:'json'
,并设置正确的内容类型响应头。设置正确的标题后,jQuery仍将自动解析JSON。您也可以使用
complete
处理程序,而不是
success
。Complete接收
(jqXHR jqXHR,String textStatus)
,其中
jqHXR.responseText
应为您提供原始响应。即使查询返回为非JSON,是否可能错误地将其识别为
成功:
?我不想在每个
success:function()
处理程序中编写数据是否作为JSON返回的检查程序。但是,这或者Nikhil的建议可能是一种方法。您还应该配置服务器,以便在出现错误时发回非200响应代码;在测试环境中,我只使用Python的CGIHTTPServer,不幸的是,它在加载脚本后立即返回200OK。