Saya menggunakan $http.jsonp()
permintaan angular yang berhasil mengembalikan json yang dibungkus dalam sebuah fungsi:
var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=jsonp_callback";
$http.jsonp(url).
success(function(data, status, headers, config) {
//what do I do here?
}).
error(function(data, status, headers, config) {
$scope.error = true;
});
Bagaimana cara mengakses / mengurai fungsi-dibungkus-JSON yang dikembalikan?
javascript
angularjs
jsonp
akronim
sumber
sumber
jsonp_callback
? Jika tidak, itu masalah Anda.function jsonp_callback(data) { return data.found; //should be 3 }
Jawaban:
PEMBARUAN: sejak Angular 1.6
Anda sekarang harus menentukan callback seperti ini:
$http.jsonp('some/trusted/url', {jsonpCallbackParam: 'callback'})
Ubah / akses / deklarasikan param via
$http.defaults.jsonpCallbackParam
, default kecallback
Catatan: Anda juga harus memastikan URL Anda ditambahkan ke Trusted / Whitelist:
$sceDelegateProvider.resourceUrlWhitelist
atau dipercaya secara eksplisit melalui:
$sce.trustAsResourceUrl(url)
success/error
tidak digunakan lagi .MENGGUNAKAN:
Jawaban Sebelumnya: Angular 1.5.x dan sebelumnya
Yang harus Anda lakukan adalah berubah
callback=jsonp_callback
menjadicallback=JSON_CALLBACK
seperti ini:Dan kemudian
.success
fungsi Anda harus aktif seperti yang Anda miliki jika pengembalian berhasil.Melakukannya dengan cara ini membuat Anda tidak perlu mengotori ruang global. Ini didokumentasikan dalam dokumentasi AngularJS di sini .
Memperbarui biola Matt Ball untuk menggunakan metode ini: http://jsfiddle.net/subhaze/a4Rc2/114/
Contoh lengkap:
sumber
The HAL PENTING YANG PALING saya tidak mengerti cukup sebentar adalah bahwa permintaan HARUS mengandung "callback = JSON_CALLBACK", karena AngularJS memodifikasi permintaan url , menggantikan pengenal unik untuk "JSON_CALLBACK". Respons server harus menggunakan nilai parameter 'callback' sebagai ganti hard coding "JSON_CALLBACK":
Karena saya menulis skrip server PHP saya sendiri, saya pikir saya tahu nama fungsi apa yang diinginkannya dan tidak perlu meneruskan "callback = JSON_CALLBACK" dalam permintaan. Kesalahan besar!
AngularJS menggantikan "JSON_CALLBACK" dalam permintaan dengan nama fungsi unik (seperti "callback = angular.callbacks._0"), dan respons server harus mengembalikan nilai itu:
sumber
json
file statis berkode keras .Ini sangat membantu. Angular tidak berfungsi persis seperti JQuery. Ia memiliki metode jsonp () sendiri, yang memang membutuhkan "& callback = JSON_CALLBACK" di akhir string kueri. Berikut contohnya:
Kemudian tampilkan atau manipulasi {{data}} di template Angular Anda.
sumber
Ini seharusnya berfungsi dengan baik untuk Anda, selama fungsinya
jsonp_callback
terlihat dalam cakupan global:Demo lengkap: http://jsfiddle.net/mattball/a4Rc2/ (penafian: Saya belum pernah menulis kode AngularJS sebelumnya)
sumber
Anda masih perlu mengatur
callback
di params:Di mana 'functionName' adalah referensi yang dirangkai ke fungsi yang ditentukan secara global. Anda dapat menentukannya di luar skrip sudut Anda dan kemudian mendefinisikannya kembali dalam modul Anda.
sumber
Untuk parsing lakukan ini-
Atau Anda dapat menggunakan `$ scope.data = JSON.Stringify (data);
Dalam template Angular Anda dapat menggunakannya sebagai
sumber
bagi saya solusi di atas hanya bekerja setelah saya menambahkan "format = jsonp" ke parameter permintaan.
sumber
Saya menggunakan sudut 1.6.4 dan jawaban yang diberikan oleh subhaze tidak berhasil untuk saya. Saya memodifikasinya sedikit dan kemudian berhasil - Anda harus menggunakan nilai yang dikembalikan oleh $ sce.trustAsResourceUrl . Kode lengkap:
sumber