Rumah >hujung hadapan web >tutorial js >Bagaimanakah JSONP Boleh Menyelesaikan Isu Merentas Domain AJAX jQuery?
jQuery AJAX Cross-Domain Issue
Dalam senario yang disediakan, di mana dua fail PHP (test.php dan testserver.php) berkomunikasi menggunakan AJAX jQuery, sekatan merentas domain timbul apabila ia berada pada pelayan berasingan. Pelayan A mengehoskan test.php (cth., localhost), manakala pelayan B mengehoskan testserver.php (cth., pelayan web).
Masalah:
Walaupun berjaya melaksanakan permintaan AJAX apabila fail berada pada pelayan yang sama, ia gagal dengan ralat apabila ia berada pada pelayan yang berbeza. Ini disebabkan oleh Dasar Asal Sama (SOP).
Penyelesaian:
Untuk menangani isu merentas domain ini, JSONP (JSON dengan Padding) digunakan. JSONP memanfaatkan panggilan balik untuk memintas sekatan penyemak imbas.
Pelaksanaan:
jQuery (test.php):
$.ajax({ url: "http://domain.example/path/to/file/testserver.php", dataType: 'jsonp', // Notice! JSONP (lowercase 'P') success: function(json){ // Handle JSON response (an array) alert("Success"); }, error: function(){ alert("Error"); } });
PHP (testserver.php):
<?php $arr = array("element1","element2",array("element31","element32")); $arr['name'] = "response"; $callbackName = $_GET['callback']; // Get the callback name from GET params echo $callbackName."(".json_encode($arr).");"; ?>
Penjelasan:
Nota:
Kaedah jQuery alternatif ialah $.getJSON(), yang mengendalikan permintaan JSONP dengan lebih ringkas dengan menambahkan ' panggil balik=?' ke URL. Walau bagaimanapun, URL mesti diubah untuk memasukkan parameter ini agar $.getJSON() berfungsi dengan betul.
Atas ialah kandungan terperinci Bagaimanakah JSONP Boleh Menyelesaikan Isu Merentas Domain AJAX jQuery?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!