У меня проблема с параметрами $https.post в AngularJS. Я читал, что AngularJS создает JSON для параметров. Поэтому я применил решение, найденное здесь:
http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/
Но у меня все еще есть проблема с Python CGI.
[Изменить]
Вывод console.log для objData:
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. К сожалению, это ограничение, что я не могу использовать веб-фреймворки.
апи/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 у меня нет проблем.
Возможно, одним из решений может быть обработка запроса POST непосредственно в Python без использования cgi.FieldStorage.