Подтвердить что ты не робот

Angular Запрос JS POST, не отправляющий данные JSON

Я пытаюсь отправить объект в JSON в мой веб-сервис в Flask, который ожидает JSON в данных запроса.

Я проверил сервис вручную, отправив данные JSON, и он отлично работает. Однако, когда я пытаюсь выполнить HTTP-запрос POST через контроллер angular, веб-сервер отправляет мне сообщение о том, что он не получил JSON.

Когда я проверяю заголовки запросов в Chrome, кажется, что данные не отправляются в JSON, но обычные пары "ключ/значение" даже через Content Type установлены в application/json

Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:application/json, text/plain, */*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:49
Content-Type:application/json;charset=UTF-8
DNT:1
Host:localhost:5000
Origin:http://localhost:5000
Referer:http://localhost:5000/
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36
X-Requested-With:XMLHttpRequest
Request Payload
application=AirFare&d1=10-APR-2013&d2=14-APR-2013

Если вы видели последнюю строку под запросом Payload, вы можете видеть, что данные не находятся в формате JSON.

Это HTTP POST-вызов в моем контроллере angular:

$http({
            url: '/user_to_itsr',
            method: "POST",
            data: {application:app, from:d1, to:d2},
            headers: {'Content-Type': 'application/json'}
        }).success(function (data, status, headers, config) {
                $scope.users = data.users; // assign  $scope.persons here as promise is resolved here 
            }).error(function (data, status, headers, config) {
                $scope.status = status + ' ' + headers;
            });
};  

Я отправляю данные как объект {}, но я попытался отправить его после сериализации JSON.stringify, однако я ничего не могу отправить JSON на сервер.

Действительно оцените, если кто-то может помочь.

4b9b3361

Ответ 1

Если вы сериализуете свой объект данных, он не будет правильным json-объектом. Возьмите то, что у вас есть, и просто оберните объект данных в JSON.stringify().

$http({
    url: '/user_to_itsr',
    method: "POST",
    data: JSON.stringify({application:app, from:d1, to:d2}),
    headers: {'Content-Type': 'application/json'}
}).success(function (data, status, headers, config) {
    $scope.users = data.users; // assign  $scope.persons here as promise is resolved here 
}).error(function (data, status, headers, config) {
    $scope.status = status + ' ' + headers;
});

Ответ 2

Я пробовал ваш пример, и он отлично работает:

var app = 'AirFare';
var d1 = new Date();
var d2 = new Date();

$http({
    url: '/api/test',
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    data: {application: app, from: d1, to: d2}
});

Вывод:

Content-Length:91
Content-Type:application/json
Host:localhost:1234
Origin:http://localhost:1234
Referer:http://localhost:1234/index.html
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36
X-Requested-With:XMLHttpRequest
Request Payload
{"application":"AirFare","from":"2013-10-10T11:47:50.681Z","to":"2013-10-10T11:47:50.681Z"}

Используете ли вы последнюю версию AngularJS?

Ответ 4

вы можете использовать свой метод таким образом

var app = 'AirFare';
var d1 = new Date();
var d2 = new Date();

$http({
    url: '/api/apiControllerName/methodName',
    method: 'POST',
    params: {application:app, from:d1, to:d2},
    headers: { 'Content-Type': 'application/json;charset=utf-8' },
    //timeout: 1,
    //cache: false,
    //transformRequest: false,
    //transformResponse: false
}).then(function (results) {
    return results;
}).catch(function (e) {

});

Ответ 5

попробуйте использовать абсолютный URL. если он не работает, проверьте, есть ли у службы ответные сообщения заголовки:

Access-Control-Allow-Origin и Access-Control-Allow-Headers

например:

"Access-Control-Allow-Origin": "*"
"Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept"

Ответ 6

вы можете использовать следующие, чтобы найти опубликованные данные.

data = json.loads(request.raw_post_data)

Ответ 7

$http({
    url: '/api/user',
    method: "POST",
    data: angular.toJson(yourData)
}).success(function (data, status, headers, config) {
    $scope.users = data.users;
}).error(function (data, status, headers, config) {
    $scope.status = status + ' ' + headers;
});