Saya memiliki beberapa kode lama yang membuat permintaan AJAX POST melalui metode posting jQuery dan terlihat seperti ini:
$.post("/foo/bar", requestData,
function(responseData)
{
//do stuff with response
}
requestData
hanyalah sebuah objek javascript dengan beberapa properti string dasar.
Saya sedang dalam proses memindahkan barang-barang kami untuk menggunakan Angular, dan saya ingin mengganti panggilan ini dengan $ http.post. Saya datang dengan yang berikut:
$http.post("/foo/bar", requestData).success(
function(responseData) {
//do stuff with response
}
});
Ketika saya melakukan ini, saya mendapat respon kesalahan 500 dari server. Menggunakan Firebug, saya menemukan bahwa ini mengirim tubuh permintaan seperti ini:
{"param1":"value1","param2":"value2","param3":"value3"}
JQuery yang berhasil $.post
mengirim isi seperti ini:
param1=value1¶m2=value2¶m3=value3
Titik akhir yang saya tekan mengharapkan parameter permintaan, bukan JSON. Jadi, pertanyaan saya adalah adakah yang harus memberitahu $http.post
untuk mengirim objek javascript sebagai parameter permintaan daripada JSON? Ya, saya tahu saya bisa membuat string sendiri dari objek, tetapi saya ingin tahu apakah Angular menyediakan sesuatu untuk ini di luar kotak.
sumber
$httpProvider.defaults
, maka itu tidak berfungsi, ada petunjuk tentang ini?Cannot read property "jquery" of undefined.
Bagaimana cara memperbaikinya? PS. Transformasi per panggilan berfungsi.Jika menggunakan Angular> = 1.4 , inilah solusi terbersih yang saya temukan yang tidak bergantung pada kustom atau eksternal apa pun:
Kemudian Anda dapat melakukannya di mana saja di aplikasi Anda:
Dan itu akan dengan benar membuat serial data sebagai
param1=value1¶m2=value2
dan mengirimkannya ke/requesturl
denganapplication/x-www-form-urlencoded; charset=utf-8
header Jenis Konten seperti yang biasanya diharapkan dengan permintaan POST pada titik akhir.sumber
Dari dokumentasi AngularJS:
Jadi, berikan string sebagai parameter. Jika Anda tidak menginginkannya, gunakan transformasi. Sekali lagi, dari dokumentasi:
Lihat dokumentasi untuk lebih jelasnya.
sumber
Gunakan
$.param
fungsi jQuery untuk membuat serial data JSON di requestData.Singkatnya, menggunakan kode serupa seperti milik Anda:
Untuk menggunakan ini, Anda harus menyertakan jQuery di halaman Anda bersama dengan AngularJS.
sumber
Perhatikan bahwa pada Angular 1.4, Anda dapat membuat data formulir tanpa menggunakan jQuery.
Di app.js:
Kemudian di pengontrol Anda:
sumber
Ini mungkin sedikit peretasan, tetapi saya menghindari masalah dan mengubah json menjadi array POST PHP di sisi server:
sumber
Saya juga memiliki masalah dengan pengaturan otentikasi http khusus karena $ resource cache permintaan.
Untuk membuatnya berfungsi, Anda harus menimpa header yang ada dengan melakukan ini
Saya harap saya bisa membantu seseorang. Aku butuh 3 hari untuk memikirkan yang satu ini.
sumber
Ubah header default:
Kemudian gunakan
$.param
metode JQuery :sumber
sumber
Penyesuaian cepat - bagi Anda yang mengalami masalah dengan konfigurasi global fungsi transformRequest, berikut cuplikan yang saya gunakan untuk menghilangkan
Cannot read property 'jquery' of undefined
kesalahan:sumber
Anda juga dapat mengatasi masalah ini tanpa mengubah kode di server, mengubah header dalam
$http.post
panggilan dan menggunakan$_POST
cara biasa. Dijelaskan di sini: http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/sumber
Saya sering kali menemukan perilaku bermasalah dari keseluruhan ini. Saya menggunakannya dari express (tanpa pengetikan) dan bodyParser (dengan pengetikan dt ~ body-parser).
Saya tidak mencoba mengunggah file, melainkan hanya untuk menafsirkan JSON yang diberikan dalam string posting.
Itu
request.body
hanyalah sebuah json ({}
) kosong .Setelah banyak penyelidikan akhirnya ini berhasil untuk saya:
Mungkin juga penting untuk memberikan
application/json
tipe konten dalam string permintaan dari sisi klien.sumber
Sintaks untuk AngularJS v1.4.8 + (v1.5.0)
Misalnya:
sumber