繁体   English   中英

Python和AJAX-HTTP响应

[英]Python and AJAX - HTTP Response

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

$.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模块(例如“ request”)或从BaseHTTPRequestHandler派生一个类。 我想让我的python脚本尽可能简单。 是出于某种原因,也许出于某种原因?

非常感谢!

第一个问题:

与将状态代码设置为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应用程序框架。 但这当然取决于您的应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM