Adakah yang bisa memberi tahu saya mengapa pernyataan berikut tidak mengirim data pos ke url yang ditentukan? Url dipanggil tetapi di server ketika saya mencetak $ _POST - Saya mendapatkan array kosong. Jika saya mencetak pesan di konsol sebelum menambahkannya ke data - itu menunjukkan konten yang benar.
$http.post('request-url', { 'message' : message });
Saya juga sudah mencobanya dengan data sebagai string (dengan hasil yang sama):
$http.post('request-url', "message=" + message);
Tampaknya berfungsi ketika saya menggunakannya dalam format berikut:
$http({
method: 'POST',
url: 'request-url',
data: "message=" + message,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
tetapi apakah ada cara untuk melakukannya dengan $ http.post () - dan apakah saya harus selalu menyertakan header agar dapat berfungsi? Saya percaya bahwa tipe konten di atas menentukan format data yang dikirim, tetapi dapatkah saya mengirimkannya sebagai objek javascript?
angularjs
post
angular-http
Spencer Mark
sumber
sumber
Jawaban:
Saya memiliki masalah yang sama dengan menggunakan asp.net MVC dan menemukan solusinya di sini
Bekerja seperti pesona.
KODE
sumber
bower install angular-post-fix --save-dev
untuk menambahkannya.Tidak terlalu jelas di atas, tetapi jika Anda menerima permintaan dalam PHP, Anda dapat menggunakan:
$params = json_decode(file_get_contents('php://input'),true);
Untuk mengakses array dalam PHP dari AngularJS POST.
sumber
json_decode(file_get_contents('php://input'), true);
Anda dapat mengatur "Tipe-Konten" default seperti ini:
Tentang
data
format:Coba gunakan variasi ini
sumber
Saya memiliki masalah serupa, dan saya ingin tahu apakah ini dapat berguna juga: https://stackoverflow.com/a/11443066
Salam,
sumber
Saya suka menggunakan fungsi untuk mengonversi objek ke posting params.
sumber
Ini akhirnya dialamatkan dalam sudut 1.4 menggunakan $ httpParamSerializerJQLike
Lihat https://github.com/angular/angular.js/issues/6039
sumber
Saya menggunakan param jQuery dengan AngularJS post requrest. Ini adalah contohnya ... buat modul aplikasi AngularJS, di mana
myapp
didefinisikan denganng-app
dalam kode HTML Anda.Sekarang mari kita membuat pengontrol Login dan POST email dan kata sandi.
Saya tidak suka menjelaskan kode, ini cukup sederhana untuk dimengerti :) Perhatikan bahwa
param
ini dari jQuery, jadi Anda harus menginstal jQuery dan AngularJS untuk membuatnya berfungsi. Ini screenshotnya.Semoga ini bisa membantu. Terima kasih!
sumber
Saya memiliki masalah yang sama dengan AngularJS dan Node.js + Express 4 + Router
Router mengharapkan data dari permintaan posting di tubuh. Badan ini selalu kosong jika saya mengikuti contoh dari Angular Docs
Notasi 1
Tetapi jika saya menggunakannya dalam data
Notasi 2
Edit 1:
Jika tidak, router node.js akan mengharapkan data dalam req.body jika menggunakan notasi 1:
Yang juga mengirimkan informasi sebagai muatan JSON. Ini lebih baik dalam beberapa kasus di mana Anda memiliki array di json Anda dan x-www-form-urlencoded akan memberikan beberapa masalah.
itu berhasil. Semoga ini bisa membantu.
sumber
Tidak seperti JQuery dan demi pedantry, Angular menggunakan format JSON untuk transfer data POST dari klien ke server (JQuery mungkin menggunakan urlencoded x-www-form mungkin, meskipun JQuery dan Angular menggunakan JSON untuk imput data). Oleh karena itu ada dua bagian masalah: di bagian js client dan di bagian server Anda. Jadi, Anda perlu:
cantumkan bagian klien Angular seperti ini:
DAN
tulis di bagian server Anda untuk menerima data dari klien (jika itu adalah php).
Catatan: $ _POST tidak akan berfungsi!
Solusinya bekerja untuk saya baik-baik saja, semoga, dan untuk Anda.
sumber
Untuk mengirim data melalui metode Post dengan
$http
angularjs Anda perlu mengubahdata: "message=" + message
, dengandata: $.param({message:message})
sumber
Untuk membangun jawaban @ felipe-miosso:
Tambahkan ke aplikasi Anda:
sumber
Saya tidak memiliki reputasi untuk berkomentar, tetapi sebagai tanggapan / tambahan atas jawaban Don F:
$params = json_decode(file_get_contents('php://input'));
Parameter kedua
true
perlu ditambahkan kejson_decode
fungsi untuk mengembalikan array asosiatif dengan benar:$params = json_decode(file_get_contents('php://input'), true);
sumber
Sudut
WebAPI 2
sumber
Kode ini memecahkan masalah bagi saya. Ini adalah solusi tingkat aplikasi:
sumber
Tambahkan ini di file js Anda:
dan tambahkan ini ke file server Anda:
Itu seharusnya bekerja.
sumber
Saya juga menghadapi masalah yang sama dan saya melakukan sesuatu seperti ini dan itu tidak berhasil. Pengontrol Pegas saya tidak dapat membaca parameter data.
Tetapi membaca forum ini dan API Doc, saya mencoba mengikuti dan itu berhasil bagi saya. Jika seseorang juga memiliki masalah serupa, Anda dapat mencoba di bawah ini juga.
Silakan periksa https://docs.angularjs.org/api/ng/service/ $ http # post untuk mengetahui apa yang param config lakukan. {data: '"id": "1"'} - Peta string atau objek yang akan diubah menjadi URL? data = "id: 1"
sumber
ini mungkin jawaban yang terlambat tetapi saya pikir cara yang paling tepat adalah dengan menggunakan potongan kode yang sama dengan penggunaan sudut ketika melakukan permintaan "get" menggunakan Anda
$httpParamSerializer
harus menyuntikkannya ke controller Anda sehingga Anda bisa melakukan hal berikut tanpa harus gunakan Jquery sama sekali,$http.post(url,$httpParamSerializer({param:val}))
sumber
Dalam kasus saya, saya menyelesaikan masalah seperti ini:
Anda perlu menggunakan JSON.stringify untuk setiap param yang berisi objek JSON, dan kemudian buat objek data Anda dengan "$ .param" :-)
NB: "objJSON" saya adalah objek JSON yang berisi konten array, integer, string, dan html. Ukuran totalnya> 3500 karakter.
sumber
Saya tahu sudah menerima jawaban. Tetapi, mengikuti mungkin membantu pembaca di masa depan, jika jawabannya tidak cocok untuk mereka dengan alasan apa pun.
Angular tidak melakukan ajax sama dengan jQuery. Sementara saya mencoba mengikuti panduan untuk memodifikasi sudut
$httpprovider
, saya menemukan masalah lain. Misalnya saya menggunakan codeigniter di mana$this->input->is_ajax_request()
fungsi selalu gagal (yang ditulis oleh programmer lain dan digunakan secara global, jadi tidak bisa berubah) mengatakan ini bukan permintaan ajax nyata.Untuk mengatasinya, saya mengambil bantuan janji yang ditangguhkan . Saya mengujinya di Firefox, dan ie9 dan berhasil.
Saya telah mengikuti fungsi yang didefinisikan di luar salah satu kode sudut. Fungsi ini membuat panggilan ajax jquery biasa dan mengembalikan objek ditangguhkan / janji (saya masih belajar).
Lalu saya menyebutnya kode sudut menggunakan kode berikut. Harap dicatat bahwa kami harus memperbarui
$scope
menggunakan secara manual$scope.$apply()
.Ini mungkin bukan jawaban yang sempurna, tetapi memungkinkan saya untuk menggunakan panggilan ajax jquery dengan sudut dan memungkinkan saya untuk memperbarui
$scope
.sumber
Saya punya masalah yang sama di express .. untuk menyelesaikannya Anda harus menggunakan bodyparser untuk mengurai objek json sebelum mengirim permintaan http ..
sumber
Semoga ini bisa membantu.
sumber
Tidak menemukan cuplikan kode lengkap tentang cara menggunakan metode $ http.post untuk mengirim data ke server dan mengapa itu tidak berfungsi dalam kasus ini.
Penjelasan cuplikan kode di bawah ini ...
Mengatur Content-Type dalam variabel config yang akan diteruskan bersama dengan permintaan angularJS $ http.post yang menginstruksikan server bahwa kami mengirim data dalam format postingan www.
Perhatikan metode $ htttp.post, di mana saya mengirim parameter 1 sebagai url, parameter 2 sebagai data (serial) dan parameter ke-3 sebagai konfigurasi.
Kode yang tersisa dimengerti sendiri.
Lihatlah contoh kode metode $ http.post di sini .
sumber
Jika Anda menggunakan PHP, ini adalah cara mudah untuk mengakses array dalam PHP dari AngularJS POST.
sumber
Jika menggunakan Angular> = 1.4 , inilah solusi terbersih menggunakan serializer yang disediakan oleh Angular :
Dan kemudian Anda bisa melakukan ini di mana saja di aplikasi Anda:
Dan itu akan membuat serialisasi data dengan benar
param1=value1¶m2=value2
dan mengirimkannya ke/requesturl
denganapplication/x-www-form-urlencoded; charset=utf-8
header Tipe Konten seperti yang biasanya diharapkan dengan permintaan POST pada titik akhir.TL; DR
Selama penelitian saya, saya menemukan bahwa jawaban untuk masalah ini datang dalam berbagai rasa; beberapa sangat berbelit-belit dan tergantung pada fungsi kustom, beberapa tergantung pada jQuery dan dan beberapa tidak lengkap dalam menyarankan bahwa Anda hanya perlu mengatur header.
Jika Anda hanya mengatur
Content-Type
header, titik akhir akan melihat data POST, tetapi itu tidak akan dalam format standar karena kecuali Anda memberikan string sebagai Andadata
, atau secara manual membuat serial objek data Anda, semuanya akan diserialisasi sebagai JSON oleh default dan mungkin ditafsirkan secara salah di titik akhir.misalnya jika serializer yang benar tidak diatur dalam contoh di atas, itu akan terlihat pada titik akhir sebagai:
Dan itu dapat menyebabkan penguraian yang tidak terduga, misalnya ASP.NET memperlakukannya sebagai
null
nama parameter, dengan{"param1":"value1","param2":"value2"}
sebagai nilai; atau Fiddler menafsirkannya dengan cara lain, dengan{"param1":"value1","param2":"value2"}
sebagai nama parameter, dannull
sebagai nilai.sumber
Mirip dengan format kerja yang disarankan OP & jawaban Denison, kecuali menggunakan
$http.post
bukan hanya$http
dan masih tergantung pada jQuery.Hal yang baik tentang menggunakan jQuery di sini adalah objek kompleks dapat dilewati dengan benar; terhadap konversi secara manual menjadi parameter URL yang dapat memutarbalikkan data.
sumber
Ketika saya memiliki masalah ini, parameter yang saya posting ternyata menjadi array objek, bukan objek sederhana.
sumber
Baru saja diperbarui dari sudut 1.2 ke 1.3, telah menemukan masalah dalam kode. Mengubah sumber daya akan menyebabkan loop tanpa akhir karena (saya pikir) dari $ berjanji memegang lagi objek yang sama. Mungkin itu akan membantu seseorang ...
Saya bisa memperbaikinya dengan:
sumber
Saya telah menggunakan kode jawaban yang diterima (kode Felipe) untuk sementara waktu dan sudah berfungsi dengan baik (terima kasih, Felipe!).
Namun, baru-baru ini saya menemukan bahwa ada masalah dengan objek atau array kosong. Misalnya, saat mengirimkan objek ini:
PHP sepertinya tidak melihat B dan C sama sekali. Mendapat ini:
Melihat permintaan aktual di Chrome menunjukkan ini:
Saya menulis cuplikan kode alternatif. Tampaknya berfungsi baik dengan kasus penggunaan saya, tetapi saya belum mengujinya secara ekstensif jadi gunakan dengan hati-hati.
Saya menggunakan TypeScript karena saya suka mengetik kuat tetapi akan mudah untuk mengkonversi ke JS murni:
Ini kurang efisien daripada kode Felipe tetapi saya tidak berpikir itu penting karena harus langsung dibandingkan dengan overhead keseluruhan permintaan HTTP itu sendiri.
Sekarang PHP menunjukkan:
Sejauh yang saya tahu itu tidak mungkin untuk mendapatkan PHP untuk mengenali bahwa Ba dan C adalah array kosong, tetapi setidaknya kunci muncul, yang penting ketika ada kode yang bergantung pada struktur tertentu bahkan ketika pada dasarnya kosong di dalamnya.
Perhatikan juga bahwa konversi s dan null s tidak terdefinisi menjadi string kosong.
sumber
Masukkan saja data yang ingin Anda kirim sebagai parameter kedua:
Bentuk lain yang juga berfungsi adalah:
Pastikan yang
paramName
sama persis dengan nama parameter fungsi yang Anda panggil.Sumber: Metode pintas posting AngularJS
sumber
Saya memecahkan ini dengan kode di bawah ini:
Sisi Klien (Js):
perhatikan bahwa data adalah objek.
Di server (ASP.NET MVC):
dan 'AllowCrossSiteJsonAttribute' diperlukan untuk permintaan lintas domain:
Semoga ini bermanfaat.
sumber