Я новичок в 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 обеспечит эту функциональность, но как?

Я думаю, вам нужно преобразовать ваши данные из объекта не в строку JSON, а в URL-параметры.

Из блога Бена Наделя Глядя на вывод

По умолчанию служба $ http преобразует исходящий запрос, сериализуя данные в формате JSON, а затем публикуя их с типом содержимого «application / json». Когда мы хотим опубликовать значение как публикацию FORM, нам нужно изменить алгоритм сериализации и опубликовать данные с типом содержимого «application / x-www-form-urlencoded».

Пример отсюда Глядя на вывод

$http({
    method: 'POST',
    url: url,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    transformRequest: function(obj) {
        var str = [];
        for(var p in obj)
        str.push(encodeURIComponent(p)   "="   encodeURIComponent(obj[p]));
        return str.join("&");
    },
    data: {username: $scope.userName, password: $scope.password}
}).then(function () {});

UPDATE

Чтобы использовать новые сервисы, добавленные в AngularJS V1.4, см.

Переменные кодирования URL, использующие только сервисы AngularJS

С AngularJS 1.4 и выше, два сервиса могут обрабатывать процесс кодирования данных url для запросов POST, устраняя необходимость манипулировать данные с transformRequest или с использованием внешних зависимостей, таких как jQuery:

  1. $httpParamSerializerJQLike — сериализатор, основанный на плагине jQuery .param() ( Я пытаюсь разработать игровой движок JavaScript, и я столкнулся с этой проблемой: оператор С чем вы столкнулись

  2. $httpParamSerializer — сериализатор, используемый самим Angular для запросов GET

Пример использования

$http({
  url: 'some/api/endpoint',
  method: 'POST',
  data: $httpParamSerializerJQLike($scope.appForm.data), // Make sure to inject the service you choose to the controller
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded' // Note the appropriate header
  }
}).then(function(response) { /* do something here */ });

Чем $httpParamSerializerJQLike и $httpParamSerializer отличаются

. В общем, кажется, что $httpParamSerializer — текст консольного журнала из файла с использованием javascript $httpParamSerializerJQLike, когда дело касается сложных данных структур.

Например (игнорирование процентного кодирования в скобках):

Кодирование массива

{sites:['google', 'Facebook']} // Object with array property

sites[]=google&sites[]=facebook // Result with $httpParamSerializerJQLike

sites=google&sites=facebook // Result with $httpParamSerializer

Я создал следующий скрипт, чтобы получить язык браузера:

{address: {city: 'LA', country: 'USA'}} // Object with object property

address[city]=LA&address[country]=USA // Result with $httpParamSerializerJQLike

address={"city": "LA", country: "USA"} // Result with $httpParamSerializer

Все они выглядят как излишние (или не работают) … просто сделайте это:

$http.post(loginUrl, "userName="   encodeURIComponent(email)  
                     "&password="   encodeURIComponent(password)  
                     "&grant_type=password"
).success(function (data) {

Проблема заключается в формате строки JSON. Вы можете использовать простую строку URL в данных: Вот как это должно быть (и, пожалуйста, не вносите никаких изменений в бэкэнд … конечно, нет … если ваш передний стек не поддерживает

$http({
    method: 'POST',
    url: url,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    data: 'username=' $scope.userName '&password=' $scope.password
}).success(function () {});

, то выбросьте его … надеюсь, AngularJS поддерживает! application/x-www-form-urlencoded Люди, пусть дать вам несколько советов:

$http({
     method: 'POST',
     url: 'api_endpoint',
     headers: {'Content-Type': 'application/x-www-form-urlencoded'},
     data: 'username=' $scope.username '&password=' $scope.password
 }).then(function(response) {
    // on success
 }, function(response) {
    // on error
 });

Работает как шарм с AngularJS 1.5

использовать обещания

  • при работе с обратными вызовами .then(success, error) (поскольку они устарели) $http, забудьте о .sucess и .error «

  • Это использует простой ванильный JavaScript и говорится, что Вы больше не можете использовать строку JSON_CALLBACK в качестве заполнителя для указания места обратного вызова значение параметра должно идти. Если ваша модель данных более сложная, чем просто имя пользователя и пароль, вы все равно можете сделать это (как предложено выше) «

можно найти

$http({
     method: 'POST',
     url: 'api_endpoint',
     headers: {'Content-Type': 'application/x-www-form-urlencoded'},
     data: json_formatted_data,
     transformRequest: function(data, headers) {
          return transform_json_to_urlcoded(data); // iterate over fields and chain key=value separated with &, using encodeURIComponent javascript function
     }
}).then(function(response) {
  // on succes
}, function(response) {
  // on error
});

документ для { *} Вы можете увидеть это в действии здесь encodeURIComponent $ http говорится, что

Либо вы обращаетесь к iframe как к объекту и изменяете его

headers[ "Content-type" ] = "application/x-www-form-urlencoded; charset=utf-8";

— 45 %

headers[ "Content-type" ] = "application/json";

Из эту ссылку { *} Это мой угловой контроллер. документов, это должно работать .. Вызывается функция

  $http.post(url, data,{headers: {'Content-Type': 'application/x-www-form-urlencoded'}})
    .success(function(response) {
         // your code...
     });

Эта функция берет URL, затем возвращает изображение BASE64

           var request = $http({
                method: "post",
                url: "process.cfm",
                transformRequest: transformRequestAsFormPost,
                data: { id: 4, name: "Kim" }
            });

            request.success(
                function( data ) {
                    $scope.localData = data;
                }
            );

, если у вас есть php в качестве внутреннего, тогда вам нужно будет сделать еще несколько изменений .. checkout Это мой внутренний php-контроллер laravel. как передавать эти продукты с щелчком от первого контроллера ко второму?

FF

let params = new URLSearchParams();
params.set("abc", "def");

let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded'});
let options = new RequestOptions({ headers: headers, withCredentials: true });
this.http
.post(UrlUtil.getOptionSubmitUrl(parentSubcatId), params, options)
.catch();
$http({

    method: "POST",
    url: "/server.php",
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    data: "name='Олег'&age='28'",


}).success(function(data, status) {
    console.log(data);
    console.log(status);
});

Это сработало для меня. Я использую угловой для front-end и laravel php для back-end. В моем проекте angular web отправляет данные json на серверную часть laravel.

Это моя маршрутизация laravel

var angularJsApp= angular.module('angularJsApp',[]);
angularJsApp.controller('MainCtrl', function ($scope ,$http) {

    $scope.userName ="Victoria";
    $scope.password ="password"


       $http({
            method :'POST',
            url:'http://api.mywebsite.com.localhost/httpTest?callback=JSON_CALLBACK',
            data: { username :  $scope.userName , password: $scope.password},
            headers: {'Content-Type': 'application/json'}
        }).success(function (data, status, headers, config) {
            console.log('status',status);
            console.log('data',status);
            console.log('headers',status);
        });

});

status 200

public function httpTest(){
        if (Input::has('username')) {
            $user =Input::all();
            return  Response::json($user)->setCallback(Input::get('callback'));
        }
    }

data JSON_CALLBACK ({«username»: «Victoria», » пароль «:» пароль «,» обратный вызов «:» JSON_CALLBACK «}) ; httpTes ting.js: функция 18 заголовков (c) {a || (a = sc (b)) ; return c? a [K (c)] || null: a}

Route::post('httpTest','HttpTestController@httpTest');

должен { *} методы на основе фокуса / размытия

, надеюсь, мой ответ поможет вам.
JavaScript — Почему ParseInt дает NaN с картой Array #? — Переполнение стека

Как уже говорили другие, вы должны сделать оба. Вот почему: Таким образом, вы можете взять текст из любого HTML-элемента, используя

из сети разработчиков Mozilla: & # xA ; & # xA ; [1,4,9 ] .map (Math.sqrt) & # xD ; & # xA ; даст: & {** **} хА ; & # хА ; [1,2,3] & # Xd ; & # xA ; Почему тогда это делается: & # xA ; & # xA {*** } [ ‘1’, ‘2’, ‘3’]. карта (ParseInt) & # XD ; & # хА {*** } выдают это: & # xA ; & # xA ; [1, NaN, NaN] & {** **} xD ; & # xA ; Я тестировал в Firefox 3.0.1 и C …