2015-11-26 2 views
1

Создания простого вызова POST с помощью Угловой службы $ HTTP: authService.login = функции (имя пользователя, пароль) { 'имя пользователя =' вара верительных грамот = + имя пользователя + '&' + 'password =' ​​+ пароль;

 return $http({ 
      method: 'POST', 
      url: href, 
      headers: {'accept': acceptValue, 'content-type': contentType}, 
      data: credentials 
     }).then(onSuccess, onError); 
    }; 

Не удается получить статус ошибки, вместо этого я получаю SyntaxError: Неожиданный маркер Е. консоли первой показать статус 401 и сразу же после ошибки разбора. интересно, что он делает под капотом, что он пытается разобрать, и почему я не могу получить error.status для работы.

ответ

0

Проблема может заключаться в том, как вы сериализуете свои данные. Вместо того, чтобы строить строковые себя, вы можете попытаться передать их непосредственно в data как объект:

data: {username: username, password: password} 

Угловыми должен сериализовать данные в объекте данных самого по себе.

Если это не сработает, Угловая также имеет встроенную альтернативу сериализатору по умолчанию, который имитирует найденный в jQuery. Документы на нем: here. Ваш запрос с помощью этого метода будет выглядеть примерно так:

  $http({ 
       url: "/auth/login", 
       method: "POST", 
       headers: {"Content-Type": "application/x-www-form-urlencoded"}, 
       data: $httpParamSerializerJQLike({ 
        email: email, 
        password: password 
       }) 
      }) 

Если вы идете с этой опцией, не забывайте вводить $httpParamSerializerJQLike как зависимость.

+0

Это происходит только, когда запрос отклонена с ошибкой, скорее всего, проблема с сервером. – shmidtdan

0

Кажется, что вы запросили правильно отправленное сообщение и получите ответ.

Я пробовал службу RESTful, которая возвращает код состояния 401. Вот мой код JavaScript:

объект
var href = 'https://contactsapi.apispark.net/v1/contacts/'; 
var acceptValue = 'application/json'; 
var contentType = 'application/json'; 
var credentials = {}; //'something'; 

function onSuccess(data, status, headers, config) { 

} 

function onError(data, status, headers, config) { 
    console.log('data = '+JSON.stringify(response, null, 2)); 
} 

$http({ 
    method: 'POST', 
    url: href, 
    headers: {'accept': acceptValue, 'content-type': contentType}, 
    data: credentials 
    }).then(onSuccess, onError); 

В ответе содержится в моем случае следующее:

{ 
    "data": { 
    "code": 401, 
    "contactEmail": null, 
    "description": "The request requires user authentication", 
    "homeRef": "/", 
    "reasonPhrase": "Unauthorized", 
    "uri": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2" 
    }, 
    "status": 401, 
    "config": { 
    "method": "POST", 
    "transformRequest": [ 
     null 
    ], 
    "transformResponse": [ 
     null 
    ], 
    "url": "http://localhost:8182/contacts/", 
    "headers": { 
     "accept": "application/json", 
     "content-type": "application/json" 
    }, 
    "data": {} 
    }, 
    "statusText": "Unauthorized" 
} 

Что может помочь вам, чтобы взглянуть на содержимое ответа (заголовки/полезной нагрузки). Например, если полезная нагрузка представляет собой JSON, значение заголовка Content-Type. Возможно, существует разрыв между Content-Type ответа и фактическим содержимым. Например, вы получили из текстового содержимого с типом содержимого значения application/json.

Я сделал тест, чтобы имитировать такой случай (содержание XML с типом application/json контента), и у меня есть следующее сообщение об ошибке:

SyntaxError: Unexpected token < 
    at Object.parse (native) 
    at vc (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:15:480) 
    at Zb (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:82:229) 
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:83:143 
    at m (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:7:322) 
    at dd (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:83:125) 
    at d (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:84:380) 
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:119:113 
    at n.$eval (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:133:221) 
    at n.$digest (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:130:233) 

Угловые пытается анализировать содержание JSON, но так как это неправильный формат, он не может и выдает ошибку.

Это похоже на вашу ошибку. Так что я думаю, что проблема не в вашем приложении, но Угловом на сервере ...

Надеются, что это помогает вам, Thierry

+0

Я считаю, что вы правы, спасибо за это. – shmidtdan

Смежные вопросы