我正在使用本地Web应用程序,该应用程序通过AJAX在Web服务器上执行Python脚本。
我尝试在远程服务器上部署应用程序,因为我们面对的是AJAX statusText: "parsererror"
。
我认为这是因为当脚本失败时,它没有按预期接收到正确的JSON。 我怎样才能确保脚本中断将JSON返回给浏览器,以便我能理解错误的性质?
AJAX调用如下:
$.ajax({
async: true,
type: "POST",
url: "cgi-bin/myscript.py",
contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
data: JSON.stringify(run_details),
dataType: "JSON"
})
.done(function(data) {
console.log(data)
})
.fail(function(xhr) {
console.log('Error in myscript (cf. Ajax error below).');
console.log('error',xhr);
});
在工作条件下,我使用以下方法将数据返回给客户端,该方法在本地服务器上运行良好:
success_message = "Some text"
result = {'message': success_message};
#Send JSON result back to Ajax
print("This line allows the following to be received by browser \n")
json.dump(result, sys.stdout)
如果脚本出现错误,我调用此函数来中断脚本:
def interruptScript(a_cursor, a_conn, error_message):
# Close communication with the database
a_cursor.close()
a_conn.close()
#Add error message to object
result = {'message': error_message};
#Send JSON result back to Ajax
print("This lines allows the following to be received by browser \n")
json.dump(result, sys.stdout)
sys.exit(1)
理想情况下,我希望在AJAX的“responseText”(现在为空“”)中可以访问error_message。
到目前为止,我尝试在sys.exit(error_message)
中包含一个字符串(即sys.exit(json.dumps(result))
)和一个JSON字符串(即sys.exit()
),但在PyDev中进行调试我了解到TypeError: an integer is required (got type str)
,这可能是bug。出于这个原因,我最后添加了整数1
,希望json.dump
内容将在sys.exit
之前通过AJAX传递。
更新: 我找到了导致错误的原因(远程服务器的python安装上缺少python包)。但是我会保持这个问题的开放,因为原则上我仍然有兴趣知道如何确保来自Python的错误消息(无论是来自我的自定义interruptScript()函数,还是直接来自Python的通知包没有安装)正确推送到浏览器。我正在使用cgitb.enable(),所以问题主要是,如果AJAX期待JSON,如何推送错误消息?