Javascript jQuery ajax json——查看返回的不正确数据
我在客户机/服务器环境中广泛使用jQueryJavascript 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解析,
$.ajax({dataType:'json'})
,它工作得很好…当它工作得很好时。问题是,当服务器出现故障时,它不会以json格式返回错误消息(我使用的是python withcgib
)。我想做的是为成功:
函数保留数据类型:“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。