Truyền param trong AngularJS

em muốn hỏi về cách truyền param bằng phương thức post trong angular js.

   app.controller("registryController", function($scope, $http, $window) {
   $scope.registry = function() {
    var data = {username: $scope.username, password: $scope.password};
    $http({
      method: 'POST',
      url: 'http://localhost:9080/EX09_22112018_SERVLET_RESTFUL_API/rest/userservice/registry',
      data: JSON.stringify(data)
    }).then(function(response) {
      var message = response.data;
      $window.alert(message);
    })
  }
})

em không tìm thấy cách gửi param theo request header, và có những cách nào để gửi param mà không hiển thị thông tin lên url, có phải khi gửi như thế này thì url sẽ có dạng như:

http://localhost:9080/EX09_22112018_SERVLET_RESTFUL_API/rest/userservice/registry?username=value,password=value

1 Like

Cùng thắc mắc …

đọc API sẽ rõ.
https://docs.angularjs.org/api/ng/service/$http#$http-arguments
$http post có tham số là config

1 Like

vấn đề là cách thực hiện như thế nào ấy anh. em muốn truyền qua http header, và có phải truyền qua header thì thông tin sẽ không hiển thị trên url không ạ

Cùng thắc mắc, sao cái tag lại là #java? :thinking:

2 Likes

em viết api bằng java, và không tìm thấy cách gửi param từ angular sang cho api xử lý, ví dụ như khi đăng kí 1 user mới thì sẽ gửi thông tin qua pathparam hoặc query param bên phía api sẽ lấy dữ liệu bằng @pathparam, tức là sẽ public thông tin lên trên url, vậy có cách nào để gửi qua header va body không ạ, và cách thức ntn, bên api sẽ hứng dữ liệu ntn ạ

cứu em anh ơi, 3 ngày rồi mất ăn mất ngủ, không tìm ra :(((((

API bên Java nhận path param mà bên Angular truyền theo query param thì làm sao mà nó nhận được. Phải thống nhất client và server truyền theo định dạng trước chứ nhỉ? :kissing:

Theo như phần code của Angular bạn post lên thì nên truyền theo query param theo POST method hơn là path param. Nếu chọn truyền kiểu path param thì lộ hết password trên URL.

$http({
  method: 'POST',
  url: 'http://localhost:9080/EX..../userservice/registry',
  data: {
    username: $scope.username,
    password: $scope.password
  }
}).then(function (res) {
  //...
});

Hoặc bỏ vào header như ý của bạn, bên Java thì trích theo header.

var prefix = 'reg-'; // registry
var customHeaders = {};
customHeaders[prefix + 'username'] = $scope.username;
customHeaders[prefix + 'password'] = $scope.password;

$http({
  method: 'POST',
  url: 'http://localhost:9080/EX..../userservice/registry',
  headers: customHeaders
}).then(function (res) {
  //...
});

Path param

function getFullUrl(path, params) {
  // Tìm vị trí { và vị trí }
  // lấy chuỗi ở trong { và } gán vào biến p
  // Kiểm tra tồn tại params[p] không, nếu có thì thay {p} bằng params[p]
  // Nếu không thì thay {p} thành chuỗi rỗng ""
  // Logic nhiều quá... lười code
}

var url = getFullUrl(
  'https://domain.com/registry/{username}/{password}',
  {
    username: $scope.username,
    password: $scope.password
  }
);

$http({
  method: 'POST',
  url: url
}).then(function (res) {
  //...
});
2 Likes

em muốn hỏi thêm là có những cách truyền param nào ạ, có phải ngoài cách truyền trên url ra thì còn có thể truyền qua header và body không ạ. dùng pathparam và query param thì em làm được rồi, bây giờ em đang tìm hiểu về mấy cách còn lại, Chốt lại là có mấy cách hả anh, cho em xin demo thì càng tốt ạ

Bạn có thể tìm hiểu thêm về GraphQL.

2 Likes

Dạ. Cảm ơn anh nhiều ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?