У меня проблема с параметрами $ https.post на AngularJS. Я читал, что 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.
[Редактировать]
Вывод console.log для objData:
Object {hostname: "test", id_venue: 20}
осмотр Запрос Payload:
action: "insert",
objData: { first: "test", second:"test2" }
[/ Edit]
Обращение к сайту
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'
Любое решение о том, как правильно читать Params на Python CGI FieldStorage. Или любой способ отправить их с помощью AngularJS? С $ http.get у меня нет никаких проблем.
Возможно, одним из решений может быть обработка запроса POST непосредственно на Python без использования cgi.FieldStorage.
Что содержит objData на стороне js? –
Я отредактировал ответ, чтобы показать значение objData – Nicola
Хорошо, мои ответы были неверными, но, кстати, это не совсем недействительно ответ :) –