2016-03-22 5 views
1

Как следует из названия, я пытаюсь написать вызов AJAX с использованием объекта $ http Angular. Я хотел бы отправить запрос на отправку, который отправит JSON в тело запроса, но также имеет строку запроса, добавленную к URL-адресу. После прочтения документации для $ http до конца, серфинга для ответов на SO и попыток нескольких различных конфигураций, Я до сих пор не понимаю, как правильно передать параметры. В настоящее время мой API отвечает либо пустым JSON, либо Bad Request (400).

Код

function inviteStaff (json) { 
    authToken = service.getAuthToken(); 
    return $http({ 
     method: 'POST', 
     url: baseUrl + '/invitations' + '?authToken=' + authToken, 
     data: JSON.stringify(json), 
     headers: { 
      'Content-type': 'application/json' 
     } 
    }); 
} 

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

self.invite = function ($form) { 
    self.showLoader = true; 
    InvitesService.inviteStaff($scope.inviteModel).then(function() { 
     $form.$setPristine(); 
     $scope.inviteModel.timestamp = new Date(); 
     $scope.invites.unshift($scope.inviteModel); 
     $scope.inviteModel = self.createNewInvite(); 
     self.showLoader = false; 
    }, 
    function() { 
     self.showLoader = false; 
    }); 
}; 

журнал Запрос

data: "authToken=********&t=*****" // this is weird because it adds another "t" parameter to this query string here 
headers: Object 
    Accept: "application/json" 
    Accept-Language: "en" 
    Content-type: "application/json" 
    authToken: "*********" // just the token here 
    __proto__: Object 
method: "POST" 
params: Object 
timeout: Object 
transformRequest: Array[1] 
transformResponse: Array[1] 
url: "http://****.****.com:****/doctors/invitations?authToken=*****" 
__proto__: Object 

Param JSON объект

{ 
    accountType: "LEAD_DOCTOR", 
    firstName: "kraken", 
    lastName: "lastName", 
    email: "[email protected]" 
} 

Может кто-нибудь пролить немного света на том, как это должно работать? Я передаю объект json к данным или параметрам? Нужно ли использовать JSON.stringify в поле данных? В некоторых случаях я также видел, как люди передавали пустую строку в данные.

Я также пропустил его через Charles Proxy. Я могу приблизиться к тому, что хочу, но по какой-то причине JSON отображается под текстовым фильтром JSON как строка запроса, а не фильтр JSON.

Любые идеи были бы полезны. Я буду реорганизовать и обновить все, чтобы использовать инструмент $ resource, но мы находимся в сжатые сроки, и я просто хочу, чтобы это работало пока. Дайте мне знать, если вам нужна дополнительная информация.

ОБНОВЛЕНИЕ Мы используем swagger для документирования нашего API, и вы можете на самом деле поразить конечную точку в своем интерфейсе. Он производит следующую команду CURL. Я подумал, что это может помочь решить проблему.

curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" -d "{ 
    \"firstName\": \"string\", 
    \"lastName\": \"string\", 
    \"email\": \"[email protected]\", 
    \"accountType\": \"CLIENT\" 
}" "http://*****.****.com:****/doctors/invitations?authToken=***obfuscatedAuthToken***" 
+1

В чем проблема? –

+1

Второй вопрос: вы можете передать весь объект javascript, Angular обработает его – dex

+0

@MB Я обновлю вопрос – Kraken

ответ

0

Оказывается, мы имели функцию HTTP Перехватчик в другом месте в коде, который меняющегося тип содержимого! Обернуто это условно, и сейчас хорошо идти. Спасибо всем, кто помог мне убедиться, что мой код написан правильно!

2

Я бы порекомендовал вам воспользоваться поля заголовка:

function inviteStaff (json) { 
authToken = service.getAuthToken(); 
return $http({ 
    method: 'POST', 
    url: baseUrl + '/invitations', 
    data: JSON.stringify(json), 
    headers: { 
     'Content-type': 'application/json', 
     'authToken': authToken 
    } 
    }); 
} 

Затем на стороне сервера, задать текущий запрос для значения заголовка authToken.

Передача токены в URL имеет некоторые проблемы безопасности, для чтения: https URL with token parameter : how secure is it?

+0

«Мы в сжатые сроки, и я просто хочу, чтобы это работало сейчас» - ваше предложение действительно, но не то, что OP ищет атм. – Brett

+0

@ Бретт был прямо на носу. Однако очень полезный совет для будущего. Благодаря! На самом деле мы уже планируем ужесточить безопасность в ближайшем будущем. – Kraken