【发布时间】:2015-01-29 07:43:26
【问题描述】:
我对 AngularJS 上的 $https.post 参数有疑问。我读到 AngularJS 正在为参数创建一个 JSON。 所以我应用了这里找到的解决方案:
AngularJS - Any way for $http.post to send request parameters instead of JSON?
http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/
但是我仍然有 Python CGI 的问题。
[编辑]
objData 的 console.log 输出:
Object {hostname: "test", id_venue: 20}
检查请求负载:
action: "insert",
objData: { first: "test", second:"test2" }
[/编辑]
网站调用
angular.module('myApp.services', [])
.service('MyService', ['$http', '$q', function ($http, $q) {
this.insert = function (objData){
console.log(objData);
var deferred = $q.defer();
$http.post('api/api.py', { action: 'insert', objData: objData }).success(function (data, status, headers, config) {
deferred.resolve(data);
}).error(function (response) {
deferred.reject("error");
});
return deferred.promise;
};
}])
服务器端代码是用 Python 和 CGI 编写的。不幸的是,我无法使用 Web 框架。
api/api.py
import cgi
params = cgi.FieldStorage()
print 'Content-type: application/json'
print
print params
print params['objData'].value
检查请求头和响应,我显然有一个 KeyError:
FieldStorage(None, None, [MiniFieldStorage('action', 'insert'), MiniFieldStorage('objData[first]', 'test'), MiniFieldStorage('objData[second]', 'test2')])
KeyError: 'objData'
关于如何正确读取 Python CGI FieldStorage 上的参数的任何解决方案。 或者有什么方法可以用 AngularJS 正确发送它们? 使用 $http.get 我没有任何问题。
也许一种解决方案是直接在 Python 中处理 POST 请求,而不使用 cgi.FieldStorage。
【问题讨论】:
-
js端objData包含什么?
-
我编辑了答案以显示 objData 值
-
好的,我的答案假设是错误的,但顺便说一句,它并没有完全使答案无效:)
标签: python json angularjs post cgi