Saya baru mengenal AngularJS, dan untuk awalnya, saya berpikir untuk mengembangkan aplikasi baru hanya menggunakan AngularJS.
Saya mencoba membuat panggilan AJAX ke sisi server, menggunakan $http
dari Aplikasi Angular saya.
Untuk mengirim parameter, saya mencoba yang berikut:
$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);
});
Ini berfungsi, tetapi menggunakan jQuery juga di $.param
. Untuk menghapus ketergantungan pada jQuery, saya mencoba:
data: {username: $scope.userName, password: $scope.password}
tetapi ini tampaknya gagal. Kemudian saya mencoba params
:
params: {username: $scope.userName, password: $scope.password}
tetapi ini juga tampaknya gagal. Kemudian saya mencoba JSON.stringify
:
data: JSON.stringify({username: $scope.userName, password: $scope.password})
Saya menemukan jawaban yang mungkin untuk pencarian saya, tetapi tidak berhasil. Apakah saya melakukan sesuatu yang salah? Saya yakin, AngularJS akan menyediakan fungsionalitas ini, tetapi bagaimana caranya?
javascript
jquery
angularjs
ajax
angularjs-http
Veer Shrivastav
sumber
sumber
$http({method: 'post', url: URL, data: {username: $scope.userName, password: $scope.password}});
$scope.userName
didefinisikan? kenapa kamu tidak mencobadata: data
?Jawaban:
Saya pikir yang perlu Anda lakukan adalah mengubah data Anda dari objek bukan ke string JSON, tetapi ke url params.
Dari blog Ben Nadel .
Contoh dari sini .
MEMPERBARUI
Untuk menggunakan layanan baru yang ditambahkan dengan AngularJS V1.4, lihat
sumber
angular.element
, Anda cukupreturn 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('&');
Variabel penyandian URL hanya menggunakan layanan AngularJS
Dengan AngularJS 1.4 dan yang lebih baru, dua layanan dapat menangani proses penyandian url data untuk permintaan POST, menghilangkan kebutuhan untuk memanipulasi data dengan
transformRequest
atau menggunakan dependensi eksternal seperti jQuery:$httpParamSerializerJQLike
- serializer yang terinspirasi oleh jQuery's.param()
( disarankan )$httpParamSerializer
- serializer yang digunakan oleh Angular sendiri untuk permintaan GETContoh penggunaan
Lihat demo Plunker yang lebih bertele-tele
Bagaimana
$httpParamSerializerJQLike
dan$httpParamSerializer
berbedaSecara umum, tampaknya
$httpParamSerializer
menggunakan format penyandian url yang lebih "tradisional" daripada$httpParamSerializerJQLike
ketika datang ke struktur data yang kompleks.Misalnya (mengabaikan persen penyandian kurung):
• Pengkodean array
• Pengkodean objek
sumber
$http.({...
bukannya `$http.post({...
Semua ini kelihatannya berlebihan (atau tidak berfungsi) ... lakukan saja ini:
sumber
Masalahnya adalah format string JSON, Anda dapat menggunakan string URL sederhana dalam data:
sumber
encodeURIComponent($scope.userName)
untuk menyandikan url data atau parameter Anda akan rusak jika pengguna memasukkan nilai seperti"&myCustomParam=1"
Inilah yang seharusnya (dan tolong jangan ada perubahan backend ... tentu saja tidak ... jika front stack Anda tidak mendukung
application/x-www-form-urlencoded
, maka buanglah ... semoga AngularJS melakukannya!Bekerja seperti pesona dengan AngularJS 1.5
Teman-teman, mari beri kamu beberapa saran:
gunakan janji
.then(success, error)
ketika berurusan dengan$http
, lupakan.sucess
dan.error
panggilan balik (karena mereka sudah ditinggalkan)Dari situs angularjs di sini " Anda tidak dapat lagi menggunakan string JSON_CALLBACK sebagai pengganti untuk menentukan ke mana nilai parameter panggilan balik harus pergi. "
Jika model data Anda lebih kompleks daripada hanya nama pengguna dan kata sandi, Anda masih bisa melakukan itu (seperti yang disarankan di atas)
Dokumen untuk
encodeURIComponent
dapat ditemukan di sinisumber
Jika itu bentuk coba ubah tajuk menjadi:
dan jika itu bukan formulir dan json sederhana maka coba tajuk ini:
sumber
$_POST
array kosong .!sumber
Dari $ http docs ini seharusnya berfungsi ..
sumber
headers
tidak akan memengaruhidata
yang masih perlu di-urlencode, dengan satu atau lain cara.Anda perlu memposting objek javascript biasa, tidak ada yang lain
jika Anda memiliki php sebagai back-end maka Anda perlu melakukan beberapa modifikasi lagi .. periksa tautan ini untuk memperbaiki sisi server php
sumber
Meskipun jawaban terlambat, saya menemukan UrlSearchParams sudut bekerja sangat baik bagi saya, itu mengurus pengodean parameter juga.
sumber
Ini berhasil untuk saya. Saya menggunakan sudut untuk front-end dan php laravel untuk back-end. Dalam proyek saya, web sudut mengirim data json ke back-end laravel.
Ini adalah pengontrol sudut saya.
Ini adalah pengendali php back-end laravel saya.
Ini adalah routing laravel saya
Hasil dalam browser adalah
Ada ekstensi chrome yang disebut tukang pos. Anda dapat menggunakan untuk menguji url back-end Anda apakah berfungsi atau tidak. https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=id
semoga jawaban saya akan membantu anda.
sumber