Dalam D3 v5, kod dalam panggilan balik d3.json() gagal dilaksanakan, menyebabkan pembangun bingung. Percanggahan ini telah muncul disebabkan oleh perubahan ketara dalam tandatangan d3.json() sejak D3 v4.
D3 v5 telah meninggalkanXMLHttpRequest dan menggunakan API Fetch, memilih Berjanji untuk mengurus permintaan tak segerak. Akibatnya, hujah kedua kepada d3.json() bukan lagi panggilan balik yang bertanggungjawab untuk mengendalikan permintaan. Sebaliknya, ia berfungsi sebagai objek RequestInit pilihan. Akibatnya, d3.json() kini mengembalikan Promise yang boleh dimanipulasi menggunakan kaedah .then()nya.
Untuk menyelesaikan isu, kod anda hendaklah diubah suai seperti berikut:
d3.json("/trip_animate/tripData.geojson") .then(function(data){ // Code from your callback goes here... });
Pengendalian ralat juga telah mengalami perubahan dalam D3 v5. Dalam versi terdahulu, ralat telah dilaporkan melalui parameter pertama panggilan balik yang dihantar kepada d3.json(). Walau bagaimanapun, dalam D3 v5, Janji yang dikembalikan oleh d3.json() akan ditolak jika ralat berlaku. Ini membolehkan penggunaan mekanisme pengendalian ralat JS vanilla:
Menggunakan Pengendali Penolakan sebagai Argumen Kedua untuk .then()
d3.json("/trip_animate/tripData.geojson") .then(function(data) { // Code from your callback goes here... }, function(error) { // Error handling code here... });
Menggunakan .catch( ) untuk Mengendalikan Penolakan
d3.json("/trip_animate/tripData.geojson") .then(function(data) { // Code from your callback goes here... }) .catch(function(error) { // Error handling code here... });
Atas ialah kandungan terperinci Mengapa Kod Saya Dalam Panggilan Balik d3.json() Tidak Dilaksanakan dalam D3 v5?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!