Я новичок в AngularJS, и для начала я подумал о разработке нового приложения с использованием только AngularJS.
Я пытаюсь сделать AJAX-вызов на стороне сервера, используя $http
мое приложение Angular.
Для отправки параметров я попробовал следующее:
$http({
method: "post",
url: URL,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
data: $.param({username: $scope.userName, password: $scope.password})
}).success(function(result){
console.log(result);
});
Это работает, но также использует jQuery $.param
. Для удаления зависимости от jQuery я попытался:
data: {username: $scope.userName, password: $scope.password}
но это, казалось, потерпело неудачу. Тогда я попробовал params
:
params: {username: $scope.userName, password: $scope.password}
но это также, казалось, не удалось. Тогда я попробовал JSON.stringify
:
data: JSON.stringify({username: $scope.userName, password: $scope.password})
Я нашел эти возможные ответы на мои квесты, но безуспешно. Я делаю что-то неправильно? Я уверен, что AngularJS обеспечит эту функциональность, но как?
javascript
jquery
angularjs
ajax
angularjs-http
Веер Шривастав
источник
источник
$http({method: 'post', url: URL, data: {username: $scope.userName, password: $scope.password}});
$scope.userName
определен? почему ты не попробовалdata: data
?Ответы:
Я думаю, вам нужно преобразовать ваши данные из объекта не в строку JSON, а в URL-параметры.
Из блога Бена Наделя .
Пример отсюда .
ОБНОВИТЬ
Чтобы использовать новые сервисы, добавленные в AngularJS V1.4, см.
источник
angular.element
, вы можете простоreturn angular.element.param(obj);
var obj = {a: 1, b: 2}; Object.keys(obj).reduce(function(p, c) { return p.concat([encodeURIComponent(c) + "=" + encodeURIComponent(obj[c])]); }, []).join('&');
Переменные кодирования URL, использующие только сервисы AngularJS
Начиная с версии AngularJS 1.4 и выше, две службы могут обрабатывать процесс кодирования данных url для запросов POST, устраняя необходимость манипулировать данными с
transformRequest
использованием или используя внешние зависимости, такие как jQuery:$httpParamSerializerJQLike
- сериализатор, вдохновленный jQuery's.param()
( рекомендуется )$httpParamSerializer
- сериализатор, используемый самой Angular для GET-запросовПример использования
Посмотреть более подробную демоверсию Plunker
Как бывают
$httpParamSerializerJQLike
и$httpParamSerializer
разныеВ общем, кажется, что он
$httpParamSerializer
использует менее «традиционный» формат кодирования url, чем$httpParamSerializerJQLike
когда речь идет о сложных структурах данных.Например (игнорирование процентного кодирования скобок):
• Кодирование массива
• Кодирование объекта
источник
$http.({...
вместо`$http.post({...
Все это выглядит как излишнее (или не работает) ... просто сделайте это:
источник
Проблема в формате строки JSON. Вы можете использовать простую строку URL в данных:
источник
encodeURIComponent($scope.userName)
URL для кодирования данных, иначе ваши параметры будут повреждены, если пользователь"&myCustomParam=1"
Вот как это должно быть (и, пожалуйста, не вносите никаких изменений в бэкэнд ... конечно, нет ... если ваш передний стек не поддерживает
application/x-www-form-urlencoded
, то выбросьте его ... надеюсь AngularJS!Работает как шарм с AngularJS 1.5
Люди, давайте дадим вам несколько советов:
использовать обещания
.then(success, error)
при работе с ними$http
, забывать о них.sucess
и.error
обратные вызовы (так как они устарели)С сайта angularjs здесь: « Вы больше не можете использовать строку JSON_CALLBACK в качестве заполнителя для указания, куда должно идти значение параметра обратного вызова ».
Если ваша модель данных более сложна, чем просто имя пользователя и пароль, вы все равно можете это сделать (как предложено выше)
Документ на это
encodeURIComponent
можно найти здесьисточник
Если это форма, попробуйте изменить заголовок на:
и если это не форма, а простой json, попробуйте этот заголовок:
источник
$_POST
массив.источник
Из документов $ http это должно работать ..
источник
headers
не повлияет на то,data
что все равно нужно будет кодировать, так или иначе.вам нужно опубликовать простой объект JavaScript, ничего больше
если у вас есть php в качестве бэк-энда, вам нужно будет сделать еще некоторые изменения. Проверьте эту ссылку для исправления php сервера
источник
Несмотря на поздний ответ, я обнаружил, что угловой UrlSearchParams работает очень хорошо для меня, он также заботится о кодировании параметров.
источник
Это сработало для меня. Я использую угловой для front-end и laravel php для back-end. В моем проекте angular web отправляет данные json на серверную часть laravel.
Это мой угловой контроллер.
Это мой php back-end контроллер laravel.
Это мой маршрут
Результат в браузере
Существует расширение Chrome под названием почтальон. Вы можете использовать для проверки вашего внутреннего URL, работает ли он или нет. https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en
надеюсь, мой ответ поможет вам.
источник