2015-11-28 5 views
-1

Я пытаюсь отправить запрос POST с данными формы.AngularJS отправить форму данные

Использование .save(data) на $resource('http://localhost:5000/api/auth'); -объект посылает следующую соответствующую Cu строки (извлеченную с Chrome): curl 'http://localhost:5000/api/auth' -H 'Pragma: no-cache' -H 'Origin: http://localhost:63342' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36' -H 'Content-Type: application/json;charset=UTF-8' -H 'Accept: application/json, text/plain, */*' -H 'Cache-Control: no-cache' -H 'Referer: http://localhost:63342/public_html/app/index.html' -H 'Connection: keep-alive' -H 'X-FirePHP-Version: 0.0.6' --data-binary '{"username":"admin","password":"mypass"}' --compressed

И мой API делает не получить данные формы. Однако, когда я использую curl -X POST --data "username=engel&password=mypass" http://localhost:5000/api/auth, мой API возвращает 200 SUCCESS.

Как я могу использовать $resource, чтобы написать аналогичный запрос, как рабочий?

API позволяет получать ответы, что Access-Control-Allow-Originhttp://localhost:63342 разрешен.

EDIT Я использую следующий завод:

factory('AuthResource', ['$resource', function($resource) { 
    return $resource('http://localhost:5000/api/auth'); 
}]); 

, а затем я называю его

var login = AuthResource.save(user); 

где пользователь является ДИКТ с username и password

+0

вы можете возможно постить, как вы используете '$ службы resource' перед вызовом' .save' – FlorianTopf

+0

я добавил его к вопросу – YnkDK

ответ

0

Вы отправляете стандартный запрос POST с услугой $resource. Это означает, что он отправит ваши username и password в виде объекта JSON в теле запроса.

Запрос CURL, который вы отправляете, передается в виде данных в форме URL-кода. Это то, что ожидает ваш API.

Если вы хотите сделать то же самое в угловом, вы должны сообщить свой $resource, чтобы отправить его как данные формы.

Просто обновите ваш завод, добавив новый метод к $resource службы:

factory('AuthResource', ['$resource', function($resource) { 
    return $resource(
     'http://localhost:5000/api/auth', 
     {}, 
     { 
      login: { 
       method: 'POST', 
       headers: { 
        'Content-type': 'application/x-www-form-urlencoded' 
       } 
       tranformRequest: function (data, headersGetter) { 
        var str = []; 
        for (var d in data) { 
         str.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d])); 
        } 
        return str.join("&"); 
       } 
      } 
     } 
    ); 
}]); 

Этот пользовательский метод посылает правильные заголовки, но и превращает ваш объект JSON с учетными данными в строку URL-закодирован.

Вы можете использовать этот новый метод для проверки подлинности с помощью API:

var login = AuthResource.login(user); 
Смежные вопросы