4

我正在尝试使用 python 脚本回答 ajax 请求。ajax 请求发送一个 json 对象,如下所示:

$.ajax({
     url : "cgi-bin/mycgi.py",
     type : "POST",
     data : JSON.stringify(MyJSONObject),
     success : function() {...do something},
     error : function(xhr,errmsg,err) {
           alert(xhr.status);
     }
}

我的 Python 脚本 mycgi.py 有以下几行:

import sys
import simplejson as json

...

myjson = json.loads(sys.stdin.read())

#do something with the object

mystatus = "200 OK"

sys.stdout.write("Status: %s\n" % mystatus)
sys.stdout.write("Content-Type: application/json")
sys.stdout.write("\n\n")
sys.stdout.write(json.dumps(myjson))

基本上一切正常。我的浏览器收到响应,识别 - 如果状态设置为“200 OK” - 请求成功并使用返回的对象运行成功部分中的命令。

但我有两个问题:

  1. 如何让我的脚本返回带有错误消息的错误?我可以返回“404”而不是“202 OK”,并且我的浏览器意识到存在错误。但我不知道如何返回错误消息。我是否必须将此消息放在回复的标题中?
  2. 我想知道,我的客户端和服务器之间的通信方式是否“太简单”并且可能太冒险了。当我在这里阅读其他类似问题的问题时,我看到人们使用诸如“请求”之类的 python 模块或从 BaseHTTPRequestHandler 派生一个类。我想让我的 python 脚本尽可能简单。出于某种原因,是否有必要另辟蹊径?

非常感谢!

4

1 回答 1

2

对于你的第一个问题:

与将状态代码设置为 200 的响应类似,您可以在返回其他状态代码时向响应中添加内容。根据状态代码,您应该向内容添加细节和/或添加额外的标题,以防您想遵循标准http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

在 JavaScript 中,您可以为从 ajax 调用获得的响应设置特定状态代码的处理程序,或者为您执行此操作时出现的所有错误设置处理程序。有关详细信息,请参阅http://api.jquery.com/jQuery.ajax/。在这些处理程序中,您可以访问响应内容并显示消息:

$.ajax({
   url : "cgi-bin/mycgi.py",
   type : "POST",
   data : JSON.stringify(MyJSONObject),
   success : function() {...do something},
   error : function(xhr,errmsg,err) {
       // show status code and response content
       alert(xhr.status + ": " + xhr.responseText);
   }
}

如果您想返回 HTML 并显示它,只需将响应转换为 jQuery 对象。

var response = $(xhr.responseText);

对于你的第二个问题:

我个人更喜欢使用现有的工具,而不是自己做应用程序的低级部分。我认为使用隐藏不必要的复杂性和样板的库时有很多好处。只是一个非常简短的清单,上面列出了我的想法:

  1. 我不想重新发明轮子
  2. 使用成千上万其他开发人员使用的库时的错误更少
  3. 使用高级抽象时,我自己的代码得到了改进
  4. 使用知名图书馆时互联网上的好例子
  5. 未来的需求通常已经涵盖

所以在你的情况下,我什至会走得更远,看看一个苗条的 Python Web 应用程序框架。但这当然很大程度上取决于您的应用程序。

于 2013-01-30T15:44:41.963 回答