AngularJs используют объект в посте

0

Я пытаюсь передать объект json в свой метод factory.login чтобы я мог его использовать.

Это мой код:

Функция контроллера

var data = {email:'test','password':'test'};

vm.login = function() {
            employeeFactory.login(vm.url, vm.data)
                    .then(function(response) {
                        console.log(response);
                    }, function(data)
                    {
                        console.log(data.status);
                    });
        }

завод

factory.login = function(url,data) {
        return $http({
            'method': 'POST',
            'url': url,
            'data': $.param(
                data
            ),
            'headers': {
                'Content-Type': 'application/x-www-form-urlencoded'
            }
        });
    }
    return factory;

Но ошибка:

angular.js:13294 TypeError: Cannot read property 'jquery' of undefined
    at Function.n.param (jquery-2.2.2.min.js:4)
    at Object.factory.login (employeeFactory.js:14)
    at employeeController.vm.login (employeeController.js:16)
    at fn (eval at <anonymous> (angular.js:14138), <anonymous>:4:285)
    at b (angular.js:15151)
    at e (angular.js:24674)
    at m.$eval (angular.js:16895)
    at m.$apply (angular.js:16995)
    at HTMLButtonElement.<anonymous> (angular.js:24679)
    at HTMLButtonElement.n.event.dispatch (jquery-2.2.2.min.js:3)
  • 0
    Кажется, у вас есть проблема с внедрением jquery в ваш код. Вы минимизируете свой код?
  • 0
    Что ж!!!! не поймите это неправильно .... В чем вопрос?
Показать ещё 5 комментариев
Теги:

4 ответа

2

Это должно быть vm.data

vm.data = {email:'test','password':'test'};

И фабрика вообще не требует jQuery, просто используйте ниже конструкцию

factory.login = function(url,data) {
    return $http({
        'method': 'POST',
        'url': url,
         //don't use $.param, as you need jQuery dependency for that
         //for x-www-form-urlencoded you have to use this construction
         //email=test&password=test
        'data': 'email=' + data.email + '&password=' + data.password, 
        'headers': {
            'Content-Type': 'application/x-www-form-urlencoded'
        }
    });
}
return factory;

Но рассмотрите возможность использования типа JSON для обработчика запросов сервера, поскольку это намного проще

1

JSON - это формат для сериализации объекта, поэтому это строка. У вас есть объект как данные, содержащие данные, которые необходимо отправить на сервер, поэтому просто выполните следующие действия:

Просто поместите в него свой объект данных:

factory.login = function(url,data) {
    return $http({
        'method': 'POST',
        'url': url,
        'data': data
    });
}
return factory;

Угловой будет отправлять json на сервер в полезной нагрузке. Вам не нужно делать сериализацию самостоятельно.

Документация https://docs.angularjs.org/api/ng/service/ $ http → Преобразования по умолчанию ->

Запросить преобразования ($ httpProvider.defaults.transformRequest и $ http.defaults.transformRequest):

Если свойство данных объекта конфигурации запроса содержит объект, сериализуйте его в формате JSON. Преобразования ответов ($ httpProvider.defaults.transformResponse и $ http.defaults.transformResponse):

Если обнаружен префикс XSRF, разделите его (см. Раздел "Вопросы безопасности" ниже). Если обнаружен ответ JSON, десериализуйте его с помощью анализатора JSON.

Трассировка стека показывает следующую ошибку:

TypeError: Cannot read property 'jquery' of undefined
1

miss match variable использует объявленные var data = {} но использует vm.data в вашем контроллере. должен объявить

vm.data= {email:'test','password':'test'}

или

используйте data в employeeFactory.login(vm.url, data) если объявить как var data= {}

и на вашем заводе нет необходимости использовать $.param можно отправить как аргумент в методе post, например

$http.post(url, data, [{headers: { 'Content-Type' : 'application/x-www-form-urlencoded'}]);

Угловая документация

1

Ваш JSON кажется неправильным. Должно быть:

var data = { "email": "test", "password": "test"};

Также $http.post функция $http.post:

$http.post(url, data, [{headers: { 'Content-Type': 'application/x-www-form-urlencoded'}]);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню