angular.js - 同一资源jquery跨域成功$resource().save()失败
给我你的怀抱
给我你的怀抱 2017-05-15 16:51:41
0
3
724

jquery的请求如下:

angularjs的请求如下:

给我你的怀抱
给我你的怀抱

membalas semua(3)
伊谢尔伦

Perhatikan dengan teliti perbezaan permintaan antara dua permintaan anda. Saya bercakap tentang bahagian jenis kandungan Jenis kandungan lalai bagi jquery ialah application/x-www-form-urlencoded, yang merupakan permintaan mudah. Prapenerbangan diperlukan (iaitu permintaan pilihan dalam gambar kedua). Jenis kandungan lalai permintaan siaran sudut ialah aplikasi/json Ini adalah permintaan yang kompleks, terutamanya untuk pra-penerbangan, ini bermakna bahagian belakang anda tidak mengendalikan situasi pilihan:

  1. Tetapkan pengepala untuk perkhidmatan sumber sudut anda secara manual dan tukar jenis kandungan kepada application/x-www-form-urlencoded. (Tidak pasti sama ada sumber boleh menyesuaikan pengepala, kerana sumber sebenarnya adalah perkhidmatan tenang standard)

  2. Memerlukan program backend anda untuk membuat pengubahsuaian yang sepadan untuk membolehkannya mengendalikan permintaan yang kompleks (sebenarnya perubahan yang sangat kecil, sama ada java, python atau ruby ​​​​on rail mempunyai penyelesaian sedia)

小葫芦

Sila ambil perhatian bahawa apabila anda menggunakan jquery untuk menghantar permintaan, pengepala respons ditetapkan kepada Access-Control-Allow-Origin, supaya anda boleh merentas domain
Tetapi apabila anda menghantarnya dengan Angular, pengepala ini tidak ada di sana, sepatutnya logik respons sebelah pelayan anda telah membuat beberapa pertimbangan, menyebabkan pengepala ini tidak ditetapkan secara normal.

phpcn_u1582

@Evian Bukannya Angular menganggap prapenerbangan diperlukan, tetapi penyemak imbas berpendapat (disebabkan oleh konfigurasi permintaan HTTP Angular, Content-Type dan Cache-Control, menurut dokumentasi MDN) bahawa prapenerbangan perlu dimulakan .

@YAN_YANG Berdasarkan pengepala respons, pelayan anda membenarkan permintaan pra-penerbangan Anda boleh memadamkannya daripada pelayan. Saya tidak pasti cara anda mengkonfigurasi CORS Contohnya, terdapat tetapan yang serupa dalam Apache:

Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

Mengalih keluar pilihan OPTIONS secara langsung boleh mengelak daripada bertindak balas kepada prapenerbangan Sudah tentu, adalah betul untuk anda mengendalikannya dengan munasabah. (Lihat: http://stackoverflow.com/questions/23954433/post-request-with-angularj...)

Selain itu, adakah anda telah menetapkan pengepala permintaan yang betul pada Angular? (untuk CORS)

http://chstrongjavablog.blogspot.sg/2013/04/enabling-cors-for-jetty.ht...

Artikel ini menerangkan pelbagai masalah dengan OPTIONS dan mengapa jQuery baik (HEADER dialih keluar khusus untuk CORS Terdapat juga pelaksanaan Java CORS dan tetapan HEADER semasa permintaan). Bagaimana untuk menyediakan Angular? Hanya semak dokumentasi $httpProvider.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan